C++——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

原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/275666.html

(0)
上一篇 2022年7月20日
下一篇 2022年7月20日

相关推荐

发表回复

登录后才能评论