C++之初识STL—vector
文章目录
- STL基本概念
- 使用STL的好处
- 容器
- vector
- 1.vector容器简介
- 2.vector对象的默认构造函数
- 3.vector对象的带参构造函数
- 4.vector的赋值
- 5.vector的大小
- 6.vector容器的访问方式
- 7.vector的插入
STL基本概念
- STL(Standard Template Library,标准模板库)
- STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator)
- 迭代器:算法通过迭代器访问容器里面的数据
- 容器和算法之间通过迭代器进行无缝连接。
- STL 几乎所有的代码都采用了模板类或者模板函数,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会
使用STL的好处
- STL是C++的一部分,因此不需要额外安装什么,被内建在你的编译器里面
- STL的一个重要特点是将数据结构和算法分离
- 程序员不用思考STL的实现过程
- STL具有高可用性,高性能,高移植,跨平台优点
容器
序列式容器:
- 序列式容器每个元素都有固定位置–取决于插入的时机和地点,和元素值无关。
- vector,deque、list、stack、queue
关联式容器:
- 元素位置取决于特定的排序准则,和插入顺序无关
- set、multiset、map、multimap
vector
1.vector容器简介
- 尾部插入速度比较快
- vector是将元素置于一个动态数组中加以管理的容器
- vector可以随机存取元素(支持索引值直接存取)
- vector尾部添加或移除元素的速度非常快速,但是在头部插入或移除元素比较费时
2.vector对象的默认构造函数
vector<class T>vecT;
vector<int>vecInt;
vector<float>vecFloat;
vector<string>vecString;class A{};
vector<A>vecA; //用于存放CA对象的vector容器,
//由于容器元素的存放是按值复制的方式进行,所以此时CA必须提供CA的拷贝构造函数,以保证CA对象间拷贝正常vector<A*>vecpA; //用于存放CA对象指针的vector容器
3.vector对象的带参构造函数
理论知识:
- vector(beg,end); //构造函数将[beg,end)区间中的元素拷贝给本身,注意该区间左闭右开
- vector(n,elem);//构造函数将n个elem拷贝给本身
- vector(const vector& vec); //拷贝构造函数
int main()
{int arr[] = { 1,2,3,4,5 }; //用两个指针构造vector<int>v1(arr, arr + 5);vector<int>v2(3, 10);//存储3个10for (int i = 0; i < v2.size(); i++){cout << v2[i] << " ";}cout << endl;vector<int>v3(v1);//用一个已经构造好的对象初始化新的对象for (int i = 0; i < v1.size(); i++){cout << v3[i] << " ";}
}
4.vector的赋值
- vector.assign(beg,end);//将[beg,end)区间中的元素拷贝赋值给本身,注意该区间左闭右开
- vector.assign(n,elem);//将n个elem拷贝赋值给本身
- vector& operator=(const vector& vec);//重载等号操作符
- vector.swap(vec); //将vec与本身的元素互换
int main()
{vector<int>vecIntA(3, 10);vector<int> vecIntB, vecIntC, vecIntD;int iarray[] = { 0,1,2,3,4 };//将数组iarray中的所有元素赋值给vactorIntA容器vecIntA.assign(iarray, iarray + 5);cout << "A:";for (int i = 0; i < vecIntA.size(); i++){cout <<vecIntA[i] << " ";}cout << endl;//将vecIntA中所有元素赋值给vecIntBvecIntB.assign(vecIntA.begin(), vecIntA.end());cout << "B1:";for (int i = 0; i < vecIntB.size(); i++){cout <<vecIntB[i] << " ";}cout << endl;cout << "B2:";vecIntB.assign(vecIntA.begin()+2, vecIntA.end()-1);for (int i = 0; i < vecIntB.size(); i++){cout << vecIntB[i] << " ";}cout << endl;//将4个10拷贝到vecIntCvecIntC.assign(4, 10);cout << "C:";for (int i = 0; i < vecIntC.size(); i++){cout<< vecIntC[i] << " ";}cout << endl;//互换元素vecIntB.swap(vecIntC);cout << "B2:";for (int i = 0; i < vecIntB.size(); i++){cout <<vecIntB[i] << " ";}cout << endl;cout << "C:";for (int i = 0; i < vecIntC.size(); i++){cout << vecIntC[i] << " ";}cout << endl;//重载赋值运算符vecIntD = vecIntC;cout << "D:";for (int i = 0; i < vecIntD.size(); i++){cout << vecIntD[i] << " ";}return 0;
}
5.vector的大小
- vector.size(); //返回容器中元素的个数
- vector.empty(); //判断容器是否为空
- vector.resize(); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除
- vector.resize(num,elem);//重新指定容器的长度为num,若容器变长,则以elem填充新位置。如果容器变短,则末尾超出容器长度的元素被删除
int main()
{vector<int>v1;cout << "v1.size: " <<v1.size()<< endl;if (v1.empty()) //判断容器是否为空{cout << "v1 is empty" << endl;}int array[] = { 1,2,3,4,5 };v1.assign(array, array + 5);//将容器的长度变长v1.resize(10);for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;//将容器长度变短v1.resize(3);for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;//将容器长度变长,并且扩展出来的新的元素为指定的值v1.resize(10, 100);for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;return 0;
}
6.vector容器的访问方式
- vec.at[idx]; //返回索引idx所指数据,如果idx越界,抛出out_of_range异常
- vec[idx]; //返回索引idx所指的数据,越界时,运行直接报错
7.vector的插入
- 在vector末尾进行插入:push_back、在末尾删除元素:pop_back
- vector.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置
- vector.insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值
- vector.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值
int main()
{int arr[] = { 1,2,3,4,5 };vector<int>v1(arr, arr + 5);//在末尾插入函数v1.push_back(10);//在末尾删除函数v1.pop_back();//在指定位置插入一个指定元素v1.insert(v1.begin()+3,100); //注意第一个参数不能为下标,应该为指针for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;//在指定的位置插入多个元素v1.insert(v1.begin() + 3, 3, 1000);//在下标为3的位置上插入3个1000for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;//将指定的区间中的元素插入到指定的位置上,将50—80插入int b[] = { 40,50,60,70,80,90 };v1.insert(v1.begin() + 7, b + 1, b + 5);for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;
}
相关文章:

C++之初识STL—vector
文章目录 STL基本概念使用STL的好处容器vector1.vector容器简介2.vector对象的默认构造函数3.vector对象的带参构造函数4.vector的赋值5.vector的大小6.vector容器的访问方式7.vector的插入 STL基本概念 STL(Standard Template Library,标准模板库)STL 从广义上分为: 容器(con…...
资讯汇总230503
230503 12:21 【放松身心亲近自然 自驾露营成旅游新风尚】今年“五一”假期,我国旅游业的快速恢复催生自驾露营休闲游、短途游、夜游等新型旅游产品提质升级。快速发展的新兴旅游业态,在促进旅游消费、培育绿色健康生活方式等方面发挥了积极作用…...
C++之编程规范
目录 谷歌C风格指南:https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/contents/ 编码规则: • 开闭原则:软件对扩展是开放的,对修改是关闭的 • 防御式编程:简单的说就是程序不能崩溃 •…...

ChatGPT做PPT方案,10组提示词方案!
今天我们要搞定的PPT内容是: 活动类型:节日活动、会员活动、新品活动分析类型:用户分析、新品立项、项目汇报内容类型:内容规划、品牌策划 用到的工具: mindshow 邀请码 6509097ChatGPT传送门(免费使用…...

分布式夺命12连问
分布式理论 1. 说说CAP原则? CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)这3个基本…...

sourceTree离线环境部署
目录 1、下载sourceTree安装包,打开之后弹出注册界面(需要去国外网站注册)2、使用技术手段跳过注册步骤3、打开安装包进行安装 注:建议提前安装好git 1、下载sourceTree安装包,打开之后弹出注册界面(需要去…...

6.1.1 图:基本概念
一,基本概念 1.基本定义 (1)图的定义 顶点集不可以是空集,但边集可以是空集。 (2) 有向图的表示: 圆括号 无向图的表示: 尖括号 简单图、多重图: 简单图:…...

SlickEdit for Windows and Linux crack
SlickEdit for Windows and Linux crack 现在可以在“新建注释”对话框中对颜色进行排序,使调色板中的颜色阵列看起来更符合逻辑。 在拆分或扩展行注释时添加了撤消步骤,这样您只需点击“撤消”一次即可撤消行注释扩展。 已更新VHDL颜色编码,…...

ChatGPT实现stackoverflow 解释
stackoverflow 解释 ChatGPT 公开服务以来,程序员们无疑是最早深入体验和"测试"的一批人。出色的效果也引发了一系列知识产权上的争议。著名的 stackoverflow 网站,就宣布禁止用户使用 ChatGPT 生成的内容来回答问题,一经发现&…...

第五章 作业(123)【编译原理】
第五章 作业【编译原理】 前言推荐第五章 作业123 随堂练习课前热身04-17随堂练习04-17课前热身04-24 最后 前言 2023-5-3 22:12:46 以下内容源自《【编译原理】》 仅供学习交流使用 推荐 第四章 作业(123)【编译原理】 第五章 作业 1 1.令文法G为…...
基于Vue的个性化网络学习笔记系统
1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和验证码,然后对登录进来的用户判断身份信息,判断是管理员用户还是普通用户。 2.系统用户管理:不管是…...
如何搭建一个HTTP实验环境
这一讲是“破冰篇”的最后一讲,我会先简单地回顾一下之前的内容,然后在 Windows 系统上实际操作,用几个应用软件搭建出一个“最小化”的 HTTP 实验环境,方便后续的“基础篇”“进阶篇”“安全篇”的学习。 “破冰篇”回顾 HTTP …...
Electron 环境搭建
https://start.spring.io/ 在线数据分析网站 https://tj.aldwx.com/ https://www.spsspro.com/ win10如何分屏 拖到边缘 Electron 环境搭建 https://www.electronjs.org/zh/docs/latest/tutorial/%E6%89%93%E5%8C%85%E6%95%99%E7%A8%8B electron 隐藏菜单 electron 标题栏 设…...

农机电招平台~java
摘要 随着农机电招行业的不断发展,农机电招在现实生活中的使用和普及,农机电招行业成为近年内出现的一个新行业,并且能够成为大群众广为认可和接受的行为和选择。设计农机电招平台的目的就是借助计算机让复杂的销售操作变简单,变…...

springboot+vue体质测试数据分析及可视化设计(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的体质测试数据分析及可视化设计。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者&a…...

thinkphp+vue+html高校固定资产管理系统维修 租借4h80u
本高校资产管理系统采用的数据库是Mysql,使用thinkphp框架开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。运行环境:phpstudy/wamp/xammp等 开发语言:php 后端框…...
【学习笔记】「北大集训 2021」经典游戏
我觉得很厉害。要是考场上能把这道题切了的话数据结构的水平肯定是不低的。 考虑简化版问题:如果只询问一个点的答案怎么做。 注意,我这么做是有风险的。我把战线拉长了。不过当然,如果连简化版的问题都做不了,那何谈正解&#…...

优惠卷秒杀功能、全局唯一ID、乐观锁解决超卖问题、悲观锁实现一人一单、集群下锁失效问题
文章目录 1 全局唯一ID的需求分析2 Redis实现全局唯一Id3 添加优惠卷4 实现秒杀下单5 库存超卖问题分析6 乐观锁解决超卖问题6 悲观锁实现一人一单7 集群环境下的并发问题 1 全局唯一ID的需求分析 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单…...
Nest的基本概念,以及如何使用Nest CLI来构建一个简单的Web应用程序
Nest是一个用于构建高效、可扩展的Node.js服务器端应用程序的框架。它是基于Express.js构建的,并且提供了多种新特性和抽象层,可以让开发者更加轻松地构建复杂的应用程序。 本文将介绍Nest的基本概念,以及如何使用Nest CLI来构建一个简单的W…...
15个创新世界119座城:1~10章音频
感恩每一个喜欢我文字的朋友,感恩每一次遇见。 最近后台总有朋友留言,能不能每一章配上音频,这样平时开车或挤地铁时也能听听。 谢谢你们在开车和挤地铁的时候都会产生听这本书的冲动。 五一抽空先把前十章的音频转录出来,希望你们…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...