ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++——vector 详解

2022-07-20 14:37:03  阅读:160  来源: 互联网

标签:insert 删除 元素 C++ v1 v2 vector 详解


本次博客,我将记录C++中vector的用法

头文件:#include <vector>

初始化:

	//以int为例 
	vector<int> v1;
	vector<int> v2(v1); 		//v2中包含了v1中的所有副本
	vector<int> v2=v1;			//同上
	vector<int> v3(n,value) 	//v3中包含了n个重复的元素,每个元素的值都是value
	vector<int> v4(n)			//v4包含了n个元素,这些元素默认为0
	vector<int> v5{1,2,3}  		//列表初始化,v5包含了3个元素,分别为1,2,3
	
	int a[]={1,2,3};
	vector<int> v6(a,a+2);
	
	//对于字符串
	vector<string> v7={"Hello","World","!"};
	vector<string> v8={"HelloWorld!"};
	vector<string> v9=(5,"Hello")			//v9包含5个"Hello"字符串
	
	//二维数组构造方法
	vector<vector > v1(3); 			 		//v1,3维 
	vector<vector > v2(3,vector(4))	 		//v2,3*4默认值为0 
	vector<vector > v3(3,vector(4,1))		//v3,3*4默认值均为1 
	vector<vector > v4={{1,2,3},{4,5,6}}; 	// 构造一个2*3 的二维vector,并赋值

如果vector的元素类型是int,默认初始化为0;如果vector元素类型为string,则默认初始化为空字符串

插入新元素

push_back(),开辟新空间,插入新元素
v1.push_back(3) //将元素3添加到数组尾部

insert(),可以先看这张图:
image

vector<int> v{1,2};
	
	v.insert(v.begin()+1,3);//1 3 2
	
	v.insert(v.end(),2,5);	//1 3 2 5 5
	
	vector<int> v1{7,8,9};
	v.insert(v.end(),v1.begin(),v1.end());//1 3 2 5 5 7 8 9
	
	v.insert(v.end(),{10,11}); //1 3 2 5 5 7 8 9 10 11

遍历访问

for(int i=0;i<v1.size();i++){
	cout<<v1[i]<<' ';			//v1.size()就是大小函数,用于获取v1的元素个数
	v1[i]=3;
}

注意,只能对已经存在的元素进行赋值或修改,可以看下面代码:

vector<int> v;
v[0]=1		//出错,因为访问v[0]属于越界行为

删除元素

首先我们要明确容器vector中大小容量的概念:

image

vector 的大小<=它的容董。当大小等于容量时,增加一个元素就会导致更多内存的分配。对于一个 vector 对象来说,可以通过调用size()和capacity()函数来得到它的大小和容量。它们返回的是我们自己定义的无符号整型值

image

v1.pop_back(); 								// 删除在v1的最后一个元素
v1.clear(); 								// 删除v1中所有元素
v1.erase(iterator iter); 					// 删除v1中迭代器指向元素
v1.erase(iterator first,iterator last); 	// 删除v1中[first,last)中元素
	vector<int> v{1,2,3,4,5};
	cout<<"v的大小:"<<v.size()<<' '<<"v的容量:"<<v.capacity()<<endl;
	 
	v.pop_back();					//删除末尾元素
	cout<<"v的大小:"<<v.size()<<' '<<"v的容量:"<<v.capacity()<<endl;
	for(int i=0;i<v.size();i++)
	cout<<v[i]<<' ';
	cout<<endl;

输出结果:

v的大小:5 v的容量:5
v的大小:4 v的容量:5
1 2 3 4

再看我们的erase()函数:
erase() 函数在删除元素时,会将删除位置后续的元素陆续前移,并将容器的大小减1

vector<int> v{1,2,3,4,5};
	cout<<"v的大小:"<<v.size()<<' '<<"v的容量:"<<v.capacity()<<endl; //5 5 
	 
	auto iter=v.erase(v.begin()+2); //删除元素3 
	cout<<"v的大小:"<<v.size()<<' '<<"v的容量:"<<v.capacity()<<endl; //4 5
	
	for(int i=0;i<v.size();i++)
	cout<<v[i]<<' ';
	cout<<endl;
	
	cout<<*iter<<endl; //iter指向元素4 

输出结果:

v的大小:5 v的容量:5
v的大小:4 v的容量:5
1 2 4 5
4

其他的一些基本函数:
image
image
image

标签:insert,删除,元素,C++,v1,v2,vector,详解
来源: https://www.cnblogs.com/Sky6634/p/16497850.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有