本次博客,我将记录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(),可以先看这张图:
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中大小和容量的概念:
vector 的大小<=它的容董。当大小等于容量时,增加一个元素就会导致更多内存的分配。对于一个 vector 对象来说,可以通过调用size()和capacity()函数来得到它的大小和容量。它们返回的是我们自己定义的无符号整型值
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
其他的一些基本函数: