C++详解vector

news2024/12/29 11:18:22

目录

构造和拷贝构造

赋值运算符重载: 

vector的编辑函数:

assign函数:

push_back和pop_back函数:

insert函数:

erase函数:

 swap函数:

 clear函数:

begin函数:

end函数:

rbegin函数:

size函数:

resize函数: 

capacity函数:

reserve函数:

 operator【】重载:


vector库是一个动态数组库,相比于string库,vector就显得没那么冗余,vector翻译为:向量。也就是一个方向的动态延长,所以可以抽象的理解为数组,这也跟C语言中数组的作用一样,只不过C语言中的数组arr【】是静态数组(需要自己手动来进行开空间、拷贝数据、释放空间),vector是动态数组(无需自己进行复杂的开空间跟释放空间)

直接来使用vector:

创建一个vector:

格式:vector<所存的数据类型> 类名称

构造和拷贝构造

#include<iostream>
#include<vector>
using namespace std;
int main() {
	//最原始的构造,构造一个空vector
	vector<int> v1;
	//构造可以指定初始化的内容和大小
	vector<int> v2(3, 10);
	//构造一段迭代器区间
	vector<int> v3(v2.begin(), v2.end());
	//拷贝构造
	vector<int> v4(v3);
	return 0;
}

赋值运算符重载

作用:将vector赋值给另一个vector

#include<iostream>
#include<vector>
using namespace std;
int main() {
	//创建大小为3初始值为1的v1
	vector<int> v1(3, 1);
	//创建大小为5初始值为2的v2
	vector<int> v2(5, 2);
	//打印v1,v2
	for (auto e : v1) {
		cout << e << " ";
	}
	cout << endl;
	for (auto e : v2) {
		cout << e << " ";
	}
	cout << endl;
	//赋值
	v2 = v1;
	//重新打印v1,v2
	for (auto e : v1) {
		cout << e << " ";
	}
	cout << endl;
	for (auto e : v2) {
		cout << e << " ";
	}
	return 0;
}

v2的大小和内容已经被调整为v1的大小和内容了

vector的编辑函数:

assign函数:

作用:分配给vector一段新内容 

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1;
	vector<int> v2;
	vector<int> v3;
	//分配给当前vector指定大小的指定值
	v1.assign(5, 10);
	//分配给当前vector一段迭代器区间
	vector<int>::iterator it1 = v1.begin();
	v2.assign(it1 + 1, v1.end() - 1);
	//分配给当前vector数组的一段区间
	int arr[] = { 1,2,3 };
	v3.assign(arr, arr + 3);

	cout << "size of v1: " << v1.size() << endl;
	cout << "size of v2: " << v2.size() << endl;
	cout << "size of v3: " << v3.size() << endl;


	return 0;
}

push_back和pop_back函数:

 

作用:尾插和尾删我们的老朋友了,不再过多介绍,用法也是很简单,看个代码自行感悟一下吧

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1;
	//尾插1,2,3,4
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);
	v1.push_back(4);
	//打印1 2 3 4
	for (auto e : v1) {
		cout << e << " ";
	}
	cout << endl;
	//尾删最后的两个元素
	v1.pop_back();
	v1.pop_back();
	//打印1 2
	for (auto e : v1) {
		cout << e << " ";
	}

	return 0;
}

insert函数:

作用:插入一个值或者插入多个值或者一段迭代器区间

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1;
	//原始数据1234567
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);
	v1.push_back(4);
	v1.push_back(5);
	v1.push_back(6);
	v1.push_back(7);

	//最开始的后面两个位置处,插入30
	v1.insert(v1.begin() + 2, 30);
	for (auto e : v1) {
		cout << e << " ";
	}
	cout << endl;
	//最开始的后面两个位置处,插入3个30
	v1.insert(v1.begin() + 2, 3, 30);
	for (auto e : v1) {
		cout << e << " ";
	}
	cout << endl;
	//最开始的后面两个位置处,插入3个10
	int arr[] = { 10,10,10 };
	v1.insert(v1.begin() + 2, arr, arr + 3);
	for (auto e : v1) {
		cout << e << " ";
	}
	cout << endl;

	return 0;
}

erase函数:

作用:删除一个元素或者一段区间。 

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1;
	//插入十个元素
	for (int i = 1; i <= 10; i++) {
		v1.push_back(i);
	}
	for (auto e : v1) {
		cout << e << " ";
	}
	cout << endl;
	//删除一个元素,从第一个位置开始往后数五个位置,也就是第六个位置
	v1.erase(v1.begin() + 5);
	for (auto e : v1) {
		cout << e << " ";
	}
	cout << endl;
	//删除一段区间,从第一个位置到第三个位置的区间
	v1.erase(v1.begin(), v1.begin() + 3);
	for (auto e : v1) {
		cout << e << " ";
	}

	return 0;
}

 swap函数:

作用:交换两个vector

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1(3, 100);//大小为3
	vector<int> v2(5, 200);//大小为5

	for (auto e : v1) {
		cout << e << " ";
	}
	cout << endl;
	for (auto e : v2) {
		cout << e << " ";
	}
	cout << endl;

	swap(v1, v2);//交换两个vector

	for (auto e : v1) {
		cout << e << " ";
	}
	cout << endl;
	for (auto e : v2) {
		cout << e << " ";
	}
	return 0;
}

 clear函数:

作用:将vector中的所有内容给清空。

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1(3, 100);//大小为3

	for (auto e : v1) {
		cout << e << " ";
	}
	cout << endl;
	v1.clear();

	for (auto e : v1) {
		cout << e << " ";
	}

	return 0;
}

begin函数:

作用:返回起始位置的迭代器 

end函数:

 作用:返回结尾位置的迭代器

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1;
	//插入十个数据
	for (int i = 1; i <= 10; i++) {
		v1.push_back(i);
	}
	vector<int>::iterator it1 = v1.begin();
	for (; it1 != v1.end(); it1++) {
		cout << *it1 << " ";
	}
	cout << endl;
	

	return 0;
}

rbegin函数:

作用:返回指向vector容器起始元素的反向迭代器 

作用:返回指向vector容器末尾元素的反向迭代器

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1;
	//插入十个数据
	for (int i = 1; i <= 10; i++) {
		v1.push_back(i);
	}
	//打印
	for (auto e : v1) {
		cout << e << " ";
	}
	cout << endl;
	//反转迭代器
	vector<int>::reverse_iterator it1 = v1.rbegin();
	//打印
	for (; it1 != v1.rend(); it1++) {
		cout << *it1 << " ";
	}

	return 0;
}

size函数:

作用:返回vector的大小

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1;
	//插入十个数据
	for (int i = 1; i <= 10; i++) {
		v1.push_back(i);
	}
	cout << v1.size() << endl;

	return 0;
}

resize函数: 

 作用:当n小于vector的size大小的时候,缩容(将超出n以外的元素给删掉,将大小更新为n)

当n大于vector的size大小的时候,扩容(将大小更新为n,用val来补充扩充的地方,如果没给val,就用0补充扩充的元素)

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1;
	//将大小扩充为5,以0初始化
	v1.resize(5);
	//将大小扩充为8,以100初始化
	v1.resize(8, 100);
	//将大小缩容为3
	v1.resize(3);
	return 0;
}

capacity函数:

作用: 返回vector的capacity

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1;
	for (int i = 1; i < 100; i++) {
		v1.push_back(i);
	}
	cout << v1.capacity() << endl;
	return 0;
}

reserve函数:

作用:手动扩容,当我们知道我们需要开多大空间的时候,就可以进行手动扩容,可以使得编译器多次扩容浪费时间

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1;
	for (int i = 1; i < 10; i++) {
		//每次插入五个数据
		v1.push_back(i);
		v1.push_back(i);
		v1.push_back(i);
		v1.push_back(i);
		v1.push_back(i);

		cout << "capacity:" << v1.capacity() << endl;

	}
	cout << endl;
	vector<int> v2;
    //手动扩容
	v2.reserve(50);
	for (int i = 1; i < 10; i++) {
		//每次插入五个数据
		v2.push_back(i);
		v2.push_back(i);
		v2.push_back(i);
		v2.push_back(i);
		v2.push_back(i);

		cout << "capacity:" << v2.capacity() << endl;

	}
	return 0;
}

 operator【】重载:

作用:访问vector中的元素

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v1;
	for (int i = 1; i < 10; i++) {
		v1.push_back(i);
	}

	cout << v1[3] << endl;
	return 0;
}

 我们先就介绍vector这些最常见的用法,感谢大家观看!

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

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

相关文章

【以图搜图代码实现2】--faiss工具实现犬类以图搜图

第一篇&#xff1a;【以图搜图代码实现】–犬类以图搜图示例 使用保存成h5文件&#xff0c;使用向量积来度量相似性&#xff0c;实现了以图搜图&#xff0c;说明了可以优化的点。 第二篇&#xff1a;【使用resnet18训练自己的数据集】 准对模型问题进行了优化&#xff0c;取得了…

汽修行业的知识库搭建:赋能在线教育与知识付费

随着汽修行业的蓬勃发展&#xff0c;其业务范围和技术要求日益多元化。为了应对这一趋势&#xff0c;许多汽修公司开始探索线上教育模式&#xff0c;通过开设汽修知识课程&#xff0c;实现知识的有偿分享与传播。这一转变不仅拓宽了企业的盈利渠道&#xff0c;也为广大汽修爱好…

深度学习之贝叶斯分类器

贝叶斯分类器 1 图解极大似然估计 极大似然估计的原理&#xff0c;用一张图片来说明&#xff0c;如下图所示&#xff1a; ​ 例&#xff1a;有两个外形完全相同的箱子&#xff0c;1号箱有99只白球&#xff0c;1只黑球&#xff1b;2号箱有1只白球&#xff0c;99只黑球。在一次…

【Spark 实战】基于spark3.4.2+iceberg1.6.1搭建本地调试环境

基于spark3.4.2iceberg1.6.1搭建本地调试环境 文章目录 基于spark3.4.2iceberg1.6.1搭建本地调试环境环境准备使用maven构建sparksql编辑SparkSQL简单任务附录A iceberg术语参考 环境准备 IntelliJ IDEA 2024.1.2 (Ultimate Edition)JDK 1.8Spark 3.4.2Iceberg 1.6.1 使用mave…

C++----类和对象(一)

一.类的定义 1.类定义的格式 • class为定义类的关键字&#xff0c;ST为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后面分号不能省 略。类体中内容称为类的成员&#xff1a;类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或 者成员函数。 …

NAND Flash虚拟层设计概述

NAND Flash虚拟层的建立需要对NAND Flash虚拟层进行初始化&#xff0c;根据相应的NAND Flash的物理结构参数建立逻辑结构&#xff0c;并建立索引表来管理逻辑虚拟层与物理虚拟层之间的联系&#xff1b;而在NAND Flash虚拟层运行过程中需要对NAND Flash虚拟层进行相应的垃圾回收…

【AI驱动TDSQL-C Serverless数据库技术实战】 AI电商数据分析系统——探索Text2SQL下AI驱动代码进行实际业务

目录 一、Text2SQL简介二、基于TDSQL-C Serverless的Text2SQL实战2.1、程序流程图2.2、实践流程2.2.1、配置TDSQL-C2.2.2、部署LLAMA模型2.2.3、本地依赖安装2.2.4、应用构建 2.3、运行效果 三、Text2SQL下的AI驱动 Text2SQL 是一种将自然语言查询转换为 SQL 查询的技术&#x…

NVIDIA H200 Tensor Core GPU

增强 AI 和 HPC 工作负载。 文章目录 前言一、通过更大、更快的内存实现更高的性能二、通过高性能 LLM三、增强高性能计算四、Reduce Energy and TCO 降低能耗和 TCO五、通过 H200 NVL 为主流企业服务器释放 AI 加速前言 The GPU for Generative AI and HPC 用于生成式 AI 和 …

香港科技大学新作:速度场如何在复杂城市场景规划中大显身手

导读&#xff1a; 本篇文章提出了一种局部地图表示方法&#xff08;即速度场&#xff09;来解决无法为所有场景设计通用规划规则的问题。此外&#xff0c;本文开发了一种高效的迭代轨迹优化器&#xff0c;其与速度场无缝兼容&#xff0c;实现了训练和推理过程。实验结果表明&am…

Linux操作系统中Redis

1、什么是Redis Redis&#xff08;Remote Dictionary Server &#xff09;&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 可以理解成一个大容量的map。…

《向量数据库指南》——Milvus 和 Fivetran 如何为 AI 构建基础

哈哈,说起 Milvus 和 Fivetran 如何为 AI 构建基础,这可真是个有意思的话题!来,让我这个向量数据库领域的“老司机”给你详细讲解一番,保证让你听得津津有味,还能学到不少干货! Milvus 和 Fivetran:AI 搜索解决方案的黄金搭档 在当今这个数据爆炸的时代,AI 已经成为…

《软件工程概论》作业一:新冠疫情下软件产品设计(小区电梯实体按钮的软件替代方案)

课程说明&#xff1a;《软件工程概论》为浙江科技学院2018级软件工程专业在大二下学期开设的必修课。课程使用《软件工程导论&#xff08;第6版&#xff09;》&#xff08;张海藩等编著&#xff0c;清华大学出版社&#xff09;作为教材。以《软件设计文档国家标准GBT8567-2006》…

net core mvc 数据绑定 《2》 bind fromquery,FromRoute,fromform等,自定义模型绑定器

mvc core 模型绑定 控制绑定名称 》》》Bind 属性可以用来指定 模型应该 绑定的前缀 public class MyController : Controller {[HttpPost]public ActionResult Create([Bind(Prefix "MyModel")] Ilist<MyModel> model){// 模型绑定将尝试从请求的表单数据中…

Vue2实现主内容滚动到指定位置时,侧边导航栏也跟随选中变化

需求背景&#xff1a; PC端项目需要实现一个有侧边导航栏&#xff0c;可点击跳转至对应内容区域&#xff0c;类似锚点导航&#xff0c; 同时主内容区域上下滚动时&#xff0c;可实现左侧导航栏选中样式能实时跟随变动的效果。 了解了一下&#xff0c;Element Plus 组件库 和 …

从源码中学习动态代理模式

动态代理模式 动态代理是 Java 反射&#xff08;Reflection&#xff09;API 提供的一种强大机制&#xff0c;它允许在运行时创建对象的代理实例&#xff0c;而不需要在编译时静态地创建。 Java 提供了两种主要的方式来实现动态代理&#xff1a; 基于接口的动态代理&#xff1a…

2024/9/29周报

文章目录 摘要Abstract污水处理工艺流程整体介绍粗格栅细格栅曝气沉砂池提升泵房峰谷平策略 初沉池&#xff08;一级处理&#xff09;工作原理运行管理 氧化沟生化池&#xff08;二级处理&#xff09;二沉池工作原理运行参数 高效沉淀池功能与特点工作原理 深度处理&#xff08…

[BUUCTF从零单排] Web方向 03.Web入门篇之sql注入-1(手工注入详解)

这是作者新开的一个专栏《BUUCTF从零单排》&#xff0c;旨在从零学习CTF知识&#xff0c;方便更多初学者了解各种类型的安全题目&#xff0c;后续分享一定程度会对不同类型的题目进行总结&#xff0c;并结合CTF书籍和真实案例实践&#xff0c;希望对您有所帮助。当然&#xff0…

html+css+js实现dialog对话框

实现效果 HTML部分 <span class"text">点击打开 Dialog</span><!-- 警告框 --><div class"alert"><div class"header"><i>X</i> </div><div class"content">确认关闭</di…

Python 实现 YouTube 视频自动上传

文章目录 前言申请 Google API 秘钥启用 API创建项目凭证配置 API下载生成的凭据文件 youtube-upload 工具使用安装配置秘钥使用 其它问题程序尚未完成 Google 验证流程 个人简介 前言 youtube-upload 库 Python 中一个用于实现 YouTube 视频自动上传的实用工具。以下是关于如…

【 微信机器人+ AI 搭建】

摘要&#xff1a; 各种大模型已经出来好久了&#xff0c;各类app也已经玩腻了&#xff0c;接下来&#xff0c;就在考虑&#xff0c;怎么让大模型&#xff0c;利益最大化。 本人没有显著的家世&#xff0c;没有富婆包养&#xff0c;只能自己抽点时间&#xff0c;研究下技术&…