相当于JAVA中的数组,提供了一系列的方法,可以方便的操作这个数组
首先引入
#include<vector>
下面是一个初始化的例子
void printVector(vector&v){
//通过数组的方式遍历
for (int i = 0; i < v.size(); i++){
cout << v[i] << endl;
}
}
void main() {
vector<int> v1;
v1.push_back(20);
v1.push_back(40);
printVector(v1);
system("pause");
}
push_back就相当于java中的add,往后面压数据,所以打印出来的顺序是,20,40
直接复制与部份复制
直接复制
vector<int> v2 = v1;
部分复制
vector<int> v3(v1.begin(),v1.begin()+2);
有些常见的方法,如访问头部,访问尾部
void main(){
vector<int> v1;
v1.push_back(20);
v1.push_back(40);
v1.push_back(15);
v1.push_back(7);
//访问头部
v1.front() = 11;
//访问尾部
v1.back() = 90;
printVector(v1);
system("pause");
}
最终输入为 11,40,15,90,也就是说,会直接替换原来头与尾的值
如果直接写 v1.back(); 就是访问最后一位的数据
删除结尾元素:
v1.pop_back();
效果就是直接删除最后一位
数组内部的一些运算,也很符合逻辑,如
v1[2] = v1[2] + 10;
就是将数组内部的3号元素,增加10
//删除指定位置
vector<int>::iterator it = v1.begin();
it += 3;
v1.erase(it);
这里就删除了第4号元素
v1.erase(v1.begin(), v1.begin() + 3);
这里表示删除了0-4这个区间
//插入
v1.insert(v1.begin() + 2, 100);
v1.insert(v1.end() - 1, 200);
表示3号元素位置,倒数第2号元素位置,分别插入元素
vector是单向的!!!现在讲一个双向队列deque
还是先引用
#include<deque>
用法与vector也几乎一样,如下
deque<int> d1;
//添加到尾部
d1.push_back(2);
d1.push_back(10);
//添加到头部
d1.push_front(-90);
d1.push_front(-30);
也就是说,可以从头,和尾加入数据,对应的,也能从两个方向弹出
d1.pop_back(); //从尾部弹出
d1.pop_front(); //从头部弹出
而vector则只有pop_back方法
查找:
//查找第一个-90元素索引位置,无需遍历
deque<int>::iterator it = find(d1.begin(),d1.end(),-90);
if (it != d1.end())
{
int idx = distance(d1.begin(), it);
cout << "索引位置为:" << idx << endl;
}
int idx = distance(d1.begin(), it); 这个方法是查找当前 it 离初始0 的距离!