vector是顺序容器,元素的值与元素的位置无关,支持随机访问迭代器。
它可以容纳很多类型的数据,可以看作是可变长动态数组
初始化
vector<int> v1; //初始化一个普通vector
vector<int> v1(10); //声明一个初始大小为10的vector,初值不确定
vector<int> v2(10,1); //声明一个初始大小为10的vector,初值为1
vector<int> v3(v2); //声明一个vector,并把v2的值赋予v3
vector<int> v4(v2.begin(),v2.begin()+2); //声明一个vector,并把v2的0——2元素赋予v4
int a[] = {1,2,3,4,5};
vector<int> v5(a,a+4); //用数组给vector赋初值
常用函数
v6.assign(v5.begin(),v5.begin()+2); //把v6的值改为v5的0——1
v5.front(); //返回第一个元素
v5.back(); //返回最后一个元素
v1.clear() //清空v中的元素
v1.empty() //判断v1是否为空
v1.push_back(a); //把 a 插入容器末尾
v1.pop_back(); //删除v1的最后一个元素
v5.insert(v5.begin(),8); //在v5的0号位置添加元素 8
v5.insert(v5.begin()+2,3,9); //在v5的2号位置添加3个9
v5.insert(v5.begin()+3,a+1,a+4); //a是一个数组,在v5的3号位置添加数组a的一号位置(包括)到4号位置(不包括)的元素
v5.erase(v5.begin(),v5.begin()+2); //删除 v5 的0号元素开始(包括0号元素),到2号元素(不包括2号元素)
v5.erase(v5.begin()+2); //删除v5的 2 号元素,并返回2号元素后面的元素,也就是现在的 2 号元素
v5.size(); //返回vector容器中元素的个数
v2.capacity(); //返回v2在内存中可以容纳的元素个数
v2.resize(3); //将v2的元素个数设置为3,多则删,少则补,其值随机
v2.reserve(100); //将v2的容量大小设置为100
v1.swap(v2); //交换v1,v2容器的值
vector容器还可以进行 == != >= > <= < 的比较
vector的下标可以用来获取存在的元素
int a = v[2];
或v[2] = a;
迭代器
通过迭代器访问v5中的元素
vector<int>::iterator it = v5.begin();
while(it < v5.end()){
cout<< *it<<" ";
it++;
}
补充
sort(v5.begin(),v5.end()); //对v5的数据进行排序
reverse(v5.begin(),v5.end()); //把v5的数据颠倒过来
二维vector
vector<vector<int>> v(3);
for(int i = 0;i < v.size();i++){
for(int j = 2;j < 5;j++){
v[i].push_back(j);
}
}
for(int i = 0;i < v.size();i++){
for(int j = 0;j < v[i].size();j++){
printf("%d\t",v[i][j]);
}
putchar('\n');
}
//结果
2 3 4
2 3 4
2 3 4
二维vector
vector<vector<int>> v(10,vector<int>(20,1)) //新建一个10行 20列的动态数组,初值为1
deque
deque是顺序容器,支持随机访问迭代器。
vector
有的操作它都有,它的随机存取元素可以在常数时间内完成但是慢于vector。
除此之外它还有两个成员函数
void push_front(val); //将val加入倒deque的头部
void pop_front(); //删除头部的元素