如何熟练使用vector?

news2024/11/25 6:39:14

在这里插入图片描述

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻推荐专栏1: 🍔🍟🌯C语言初阶
🐻推荐专栏2: 🍔🍟🌯C语言进阶
🔑个人信条: 🌵知行合一
🍉本篇简介:>:介绍vector的使用

vector官网链接:传送门

目录

  • 一、构造函数
    • (1)无参构造
    • (2)初始化为n个值
    • (3) 迭代器区间初始化
    • (4)拷贝构造
  • 二、容量操作
    • (1) 一览表
    • (2) 代码演示
  • 三、修改与访问
    • (1) push_back && pop_back
      • assign()
    • (2) insert()
    • (3) erase()函数
    • (4) swap()
    • (5) `[]`运算符重载

一、构造函数

在这里插入图片描述

构造函数含义
vector (const allocator_type& alloc = allocator_type());无参构造
vector(size_type n, const value_type& val = value_type())初始化为nval
vector (InputIterator first, InputIterator last,const allocator_type& alloc = allocator_type())迭代器区间初始化
vector (const vector& x);拷贝构造

(1)无参构造

默认什么元素也没有.
有效元素个数:size=0
容量:capacity=0;

	//无参构造
	vector<int> v1;
	//auto it1 = v1.begin();//可以使用auto自动推导类型
	vector<int>::iterator it1 = v1.begin();
	while (it1 != v1.end())
	{
		cout << *it1 << " ";
		it1 ++ ;
	}
	cout << "v1.size=" << v1.size() << endl;
	cout << "v1.capacity=" << v1.capacity() << endl;
	cout << endl;

运行结果:

v1.size=0
v1.capacity=0

(2)初始化为n个值

nval去初始化vector;

	//初始化为n个值
	vector<int> v2(4,0);
	//auto it2 = v2.begin();
	vector<int>::iterator it2 = v2.begin();
	while (it2 != v2.end())
	{
		cout << *it2 << " ";
		it2++;
	}
	cout << endl;

运行结果:

0 0 0 0

(3) 迭代器区间初始化

用一个迭代器区间进行初始化,这里采用数组的头和尾作为迭代器区间.

	//迭代器区间初始化
	int a3[10] = { 1,3,4,5,6,7,8,98,100,11 };
	vector<int> v3(a3, a3 + 10);//注意这里给的是+10,因为迭代器的end是指向最后一个有效元素的下一个位置,左闭右开
	auto it3 = v3.begin();
	while (it3 != v3.end())
	{
		cout << *it3 << " ";
		it3++;
	}
	cout << endl;

运行结果:

1 3 4 5 6 7 8 98 100 11

(4)拷贝构造

	//拷贝构造
	vector<int> v4(v3);//v3就是上面的迭代器区间初始化好的v3
	auto it4 = v4.begin();
	while (it4 != v4.end())
	{
		cout << *it4 << " ";
		it4++;
	}
	cout << endl;

运行结果:

1 3 4 5 6 7 8 98 100 11

二、容量操作

在这里插入图片描述

(1) 一览表

接口说明
size()有效数据的个数
resize()改变有效数据的个数
capacity()容量大小
empty()判空
reserve()改变容量大小

(2) 代码演示

void test2()
{
	int a1[10] = { 1,3,4,5,6,7,8,98,100,11 };
	vector<int> v1(a1, a1 + 10);
	cout << "v1.size()=" << v1.size() << endl;//显示有效数据的个数
	cout << "v1.capacity()=" << v1.capacity() << endl;//显示容量的大小
	cout << "v1.empty()=" << v1.empty() << endl;//判断容器是否为NULL
	cout << endl;


	v1.resize(5);//改变有效数据的个数
	cout << "v1.size()=" << v1.size() << endl;
	cout << "v1.capacity()=" << v1.capacity() << endl;
	vector<int>::iterator it1 = v1.begin();
	while (it1 != v1.end())
	{
		cout << *it1 << " ";
		it1++;
	}
	cout << endl;

	v1.resize(15,66);
	cout << "v1.size()=" << v1.size() << endl;
	cout << "v1.capacity()=" << v1.capacity() << endl;
	cout << endl;
	it1 = v1.begin();
	while (it1 != v1.end())
	{
		cout << *it1 << " ";
		it1++;
	}
	cout << endl;


	v1.reserve(10);//改变容量的大小.
	cout << "v1.capacity()=" << v1.capacity() << endl;
	v1.reserve(50);
	cout << "v1.capacity()=" << v1.capacity() << endl;

}

运行结果:
在这里插入图片描述

三、修改与访问

在这里插入图片描述

接口说明
assign()将新内容覆盖给容器,替换其当前内容,并相应地修改其大小。
push_back()尾插
pop_back()尾删
insert()指定位置pos之前插入
erase()删除指定位置pos的值
swap()交换两个容器
operator[ ]()下标访问运算符重载

(1) push_back && pop_back

尾插和尾删相信大家已经比较熟悉了.

assign()

assign函数需要注意.
void assign (size_type n, const value_type& val);

如果n<size,则是将nval将原有数据覆盖,令size=n,而不修改容量.
如果n>size,则先扩容,再将nval值存入.

	//push_back &&pop_back
	int a1[5] = { 1,2,3,4,5 };
	vector<int> v1(a1, a1 + 5);
	for (auto itt : v1){	//1 2 3 4 5
		cout << itt << " ";
	}
	cout << endl;
	
	//尾插
	v1.push_back(6);
	v1.push_back(7);
	for (auto itt : v1){	//1 2 3 4 5 6 7
		cout << itt << " ";
	}
	cout << endl;

	//尾删
	v1.pop_back();
	for (auto itt : v1){	//1 2 3 4 5 6
		cout << itt<<" ";
	}
	cout << endl;
	
	//将新内容覆盖给容器,替换其当前内容,并相应地修改其大小
	v1.assign(5, 2);
	for (auto itt : v1){	//2 2 2 2 2
		cout << itt << " ";
	}
	cout << endl << v1.size() << " " << v1.capacity() << endl;//5 7
	cout << endl;

运行结果:

1 2 3 4 5
1 2 3 4 5 6 7
1 2 3 4 5 6
2 2 2 2 2
5 7

(2) insert()

指定位置pos之前插入.
在这里插入图片描述

代码演示:

	int a1[5] = { 1,2,3,4,5 };
	vector<int> v1(a1, a1 + 5);
	for (auto itt : v1){
		cout << itt << " ";
	}
	cout << endl;
	//iterator insert(iterator position, const value_type & val);
	v1.insert(v1.begin() + 2, 66);//在第三个位置的前面插入数据.
	for (auto itt : v1)
	{
		cout << itt<<" ";
	}
	cout << endl;

	//void insert(iterator position, size_type n, const value_type & val);
	v1.insert(v1.begin() + 5, 5, -1);//在第六个位置的前面插入5个-1.
	for (auto itt : v1)
	{
		cout << itt << " ";
	}
	cout << endl;


	int a2[5] = { 1,2,3,4,5 };
	int a3[5] = { 6,7,8,9,10 };
	vector<int> v2(a2, a2 + 5);
	for (auto itt : v2)
	{
		cout << itt << " ";
	}
	cout << endl;

	//void insert (iterator position, InputIterator first, InputIterator last);
	v2.insert(v2.begin()+5,a3 ,a3 + 5);
	for (auto itt : v2)
	{
		cout << itt << " ";
	}
	cout << endl;

运行结果:
在这里插入图片描述

(3) erase()函数

在这里插入图片描述

删除指定位置pos的值

	//erase
	int a4[10] = { 1,2,3,4,5,6,7,8,9,10 };
	vector<int> v4(a4, a4 + 10);
	for (auto itt : v4)
	{
		cout << itt << " ";
	}
	cout << endl;

	//iterator erase (iterator position);
	v4.erase(v4.begin() + 1);
	for (auto itt : v4)
	{
		cout << itt << " ";
	}
	cout << endl;

	//iterator erase (iterator first, iterator last);
	v4.erase(v4.begin()+4, v4.begin() + 9);
	for (auto itt : v4)
	{
		cout << itt << " ";
	}
	cout << endl;

运行结果:
在这里插入图片描述

(4) swap()

用于交换两个容器,注意观察交换后容量的变化.

//swap
	//void swap(vector & x);
	int a5[10] = { 1,2,3,4,5,6,7,8,9,10 };
	vector<int> v5(a5, a5 + 10);
	int a6[10] = { 2,4,6,8,10 };
	vector<int> v6(a6, a6+5);
	
	cout << "v5=";
	for (auto itt : v5){
		cout << itt << " ";
	}
	cout << endl;

	cout << "v6=";
	for (auto itt : v6){
		cout << itt << " ";
	}
	cout << endl;

	swap(v5, v6);
	cout << endl;

	cout << "v5=";
	for (auto itt : v5){
		cout << itt << " ";
	}
	cout << endl;

	cout << "v6=";
	for (auto itt : v6){
		cout << itt << " ";
	}
	cout << endl;
	cout << "v5.capacity()" << v5.capacity();
	cout << endl;
	cout << "v6.capacity()" << v6.capacity();
	cout << endl;

运行结果:
在这里插入图片描述

(5) []运算符重载

可以像数组一样通过下标直接访问.

	//[]
	int a7[10] = { 1,2,3,4,5,6,7,8,9,10 };
	vector<int> v7(a5, a5 + 10);
	cout << "v7=";
	for (int i = 0; i < 10; i++)
	{
		cout << v7[i] << " ";
	}

v7=1 2 3 4 5 6 7 8 9 10

vector的使用就分享到这里了.下一期vector模拟实现见.

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/970188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ue5 物理场的应用

cable mat wpo particle 流体粒子 choas 破损 刚体 布料 cloud abp blueprint riggedbody 体积雾 毛发 全局的 局部的 非均匀的 连续变化的 也可以多个叠加 从全局 到 范围

软件安全检测相关政策法规及安全测试的作用

安全测试 一、软件安全检测相关政策法规&#xff1a; 《网络安全法》 《网络产品和服务安全审查办法&#xff08;试行&#xff09;》 《政府信息系统安全检查办法》&#xff08; 国办发〔2009〕28 号&#xff09; 《国务院办公厅关于开展重点领域网络与信息安全检查行动的…

ssm+vue亿互游在线平台源码和论文

ssmvue亿互游在线平台源码和论文118 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 随着旅游业的迅速发展&#xff0c;传统的旅游资讯查询方式&#xff0c;已经无法满足用户需求&#xff0c;因此&#x…

2023开学礼山东财经大学《乡村振兴战略下传统村落文化旅游设计》许少辉新财经图书馆

2023开学礼山东财经大学《乡村振兴战略下传统村落文化旅游设计》许少辉新财经图书馆

SQL sever中用户管理

目录 一、用户管理常见方法 二、用户管理方法示例 2.1. 创建登录账户&#xff1a; 2.1.1 检查是否创建账户成功&#xff1a; 2.2. 创建数据库用户&#xff1a; 2.2.1检查用户是否创建成功&#xff1a; 2.3. 授予权限&#xff1a; 2.3.1授予 SELECT、INSERT 和 U…

nacos 配置中心配置优先级

默认配置文件&#xff1a; 这的默认配置名为&#xff1a;com.tulingmall.order 名称的properties文件 如果不是properties需修改下图配置 默认配置文件只需名称对应 类型就算不为properties也无需加后缀名称 后面级别更低的为配置文件引入的多文件配置

机器人中的数值优化(八)——拟牛顿方法(上)

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

1.14 手工插入ShellCode反弹

PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如文件加密与解密,病毒分析,外挂技术等&#xff0c;本次的目标是手工修改或增加节…

【单片机】有人 WH-LTE-7S1 4G cat1 模块连接服务器,教程,记录。GPRS模块连接服务器教程。socket编程。

文章目录 4G cat1 模块封装引脚名称功能拓扑图串口模块调试WH-LTE-7S1公网服务器建立python程序服务服务器程序WH-LTE-7S1 模块连接服务器与多个模块建立TCP长连接的服务器程序 本文主要介绍了一个4G Cat1模块&#xff0c;该模块具有多种功能和特性。文章接下来展示了4G Cat1模…

手把手教你Typora大纲如何显示序号(支持六级标题栏序号)

1 打开偏好设置 2 新建 base.user.css文件 3 复制代码&#xff08;重启typora生效&#xff09;&#xff1a; /************************************** * Header Counters in TOC **************************************//* No link underlines in TOC */ .md-toc-inner { …

第四章:照相机模型与增强实现

文章目录 第四章&#xff1a;照相机模型与增强实现4.1 针孔照相机模型4.1.1 照相机矩阵4.1.2 三维点的投影4.1.3 照相机矩阵的分解4.1.4 计算照相机中心 4.2 照相机标定4.3 以平面和标记物进行姿态估计4.4 增强现实4.4.1 PyGame 和 PyOpenGL4.4.2 从照相机矩阵到 Open…

PMD 检查java代码:运行过程中只需要赋值一次的局部变量可以用final修饰(LocalVariableCouldBeFinal)

https://docs.pmd-code.org/pmd-doc-6.55.0/pmd_rules_java_codestyle.html#localvariablecouldbefinal 如果一个局部变量在运行过程中只需要赋值一次&#xff0c;那么可以定义为final的。 属性ignoreForEachDecl可以控制是否忽略对for-each声明中的局部变量的检查&#xff0c…

DBService基础原理

一、DBService简介 DBService是一个高可用性的关系型数据库存储系统&#xff0c;适用于存储小量数据&#xff08;10GB左右&#xff09;&#xff0c;比如&#xff1a;组件元数据。DBService仅提供给集群内部的组件使用&#xff0c;提供数据存储、查询、删除等功能。 DBService是…

视频号如何插入带货商品链接进行变现

视频号目前是全腾讯的希望&#xff0c;视频号变现主要有6大模式 参与创作分成计划&#xff0c;也就是视频号底下广告分成&#xff0c;类似公众号文章的流量主&#xff0c;可以给大家看下收益&#xff0c;做的好的&#xff0c;收益还是非常可观的&#xff0c;只要作品有播放量&a…

一文讲清楚字符串搜索问题【朴素法】和【KMP算法】

文章目录 一、引入二、朴素解法2.1 朴素法介绍2.2 图解朴素法2.3 复杂度分析 三、KMP算法3.1 nextArr 数组介绍3.2 图解 KMP 算法3.2.1 原理3.2.2 实现 3.3 nextArr 数组求解3.4 复杂度分析 四、总结写在最后 一、引入 字符串搜索问题是字符串中重要的一类问题&#xff0c;该问…

C#通过ModbusTcp协议读写西门子PLC中的浮点数

一、Modbus TCP通信概述 MODBUS/TCP是简单的、中立厂商的用于管理和控制自动化设备的MODBUS系列通讯协议的派生产品&#xff0c;显而易见&#xff0c;它覆盖了使用TCP/IP协议的“Intranet”和“Internet”环境中MODBUS报文的用途。协议的最通用用途是为诸如PLC&#xff0c;I/…

什么是rem单位和em单位?它们有什么区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ rem 和 em 单位⭐ rem 单位&#xff08;Root Em&#xff09;⭐ em 单位⭐ 区别总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入…

.net core 上传文件大小限制

微软官网文档中给的解释是.net core 默认上传文件大小限制是30M&#xff0c;所以即便你项目里没有限制&#xff0c;这里也有个默认限制。 官网链接地址 总结了一下解决办法&#xff1a; 1.首先项目里添加一个web.config自定义配置文件 在配置文件中加上这段配置 <!--//…

2024年java面试--多线程(3)

系列文章目录 2024年java面试&#xff08;一&#xff09;–spring篇2024年java面试&#xff08;二&#xff09;–spring篇2024年java面试&#xff08;三&#xff09;–spring篇2024年java面试&#xff08;四&#xff09;–spring篇2024年java面试–集合篇2024年java面试–redi…

Echarts使用

Echarts使用 1.ECharts简介 ECharts是一个使用JavaScript实现的开源可视化库&#xff0c;可以流畅的运行在PC和移动设备上&#xff0c;兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等)&#xff0c;底层依赖矢量图形库ZRender,.提供直观&#xff0c;交互丰富&am…