这是我参与更文挑战的第6天,活动详情查看: 更文挑战
1. 定义
vector可以理解为是一个“动态数组”。
普通数组在确定大小后就不能拓展空间,但vector可以动态拓展(并不是在原有空间之后续接新空间,而是找更大的空间,然后将原数据拷贝到新空间,释放原空间)。
vector 容器的迭代器支持随机访问。
2. vector构造函数
一共有四种方式:
(1)vector v
默认构造函数,然后再通过复制的方式,一个一个初始化元素。
vector<int>v1;//默认构造函数,无参数
//再将数一个一个的传进去
for (int i = 0; i<10; i++)
{
v1.push_back(i);
}
printVector(v1);//输出 0 1 2 3 4 5 6 7 8 9
(2)vector(n ,elem)
通过n个elem进行构造。
//通过n个element构造
vector<int>v3(3,9);//3个9
printVector(v3);//输出 9 9 9
(3)vector(v.begin(),v.end())
将v中将v.begin()到v.end()区间元素都拷贝给指定容器。
//将v1中v1.begin()到v1.end()区间元素都拷贝给v2
vector<int>v2(v1.begin(),v1.end());
printVector(v2);
(4) vector(const vector &v)
类似于c++中拷贝构造函数。
//拷贝构造,将v1中全部元素拷贝给v2
vector<int>v2(v1);
printVector(v2);
3. vector赋值
一共3种方式。
vector<int>v1;
for (int i = 0; i<10; i++)
{
v1.push_back(i);
}
(1)operator =
直接用“=”符号赋值
//赋值 operator=
vector <int>v2;
v2 = v1;
printVector(v2);//输出 0 1 2 3 4 5 6 7 8 9
(2) assign(beg,end)
将beg和end区间元素赋值给另一个vector容器。
vector <int> v3;
v3.assign(v1.begin(),v1.end());
printVector(v3);//输出 0 1 2 3 4 5 6 7 8 9
(3)assign(n,elem)
将n个elem拷贝赋值给本身。
vector <int> v4;
v4.assign(3,9);
printVector(v4);//输出 9 9 9
4. vector插入与删除
(1)push_back(elem)
尾部插入elem。
(2)pop_back()
尾部删除最后一个元素。
(3)insert(const_iterator pos,elem)
向pos位置添加一个elem,注意pos必须是迭代器类型。
(4)insert(const_iterator pos,int count,elem)
向pos位置添加count个elem。
(5)erase(const_iterator pos)
删除迭代器指向的元素。
(6)erase(const_iterator start,const_iterator end)
删除从start到end之间的元素。
(7)clear()
删除容器中所有元素。
上述七种方法示例:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printVector(vector<int>&v)
{
for(vector<int>::iterator it = v.begin();it != v.end();it++)
{
cout<< *it <<" ";
}
cout<<endl;
}
//vector容器赋值
void test()
{
vector<int>v1;//默认构造函数,无参数
for (int i = 0; i<10; i++)
{
//在尾部添加元素
v1.push_back(i);
}
printVector(v1);
//在尾部删除最后一个元素
v1.pop_back();
printVector(v1);
//在第二个元素位置添加100
v1.insert(v1.begin()+1,100);//insert()第一个参数必须是迭代器类型
printVector(v1);
//在最后一个元素位置添加5个0
v1.insert(v1.end(),5,0);
printVector(v1);
//删除第5个元素
v1.erase(v1.begin()+4);
printVector(v1);
//删除从第3个到最后的元素
v1.erase(v1.begin()+2,v1.end());
printVector(v1);
//删除容器内所有元素
v1.clear();
printVector(v1);
}
int main(){
test();
}
输出结果:
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8
0 100 1 2 3 4 5 6 7 8
0 100 1 2 3 4 5 6 7 8 0 0 0 0 0
0 100 1 2 4 5 6 7 8 0 0 0 0 0
0 100