C++ STL 数组 Vector&deque

相当于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 的距离!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容