概述
deque 是 C++ 对数据结构双端队列的实现。要使用 deque,请在程序头添加:
#include <deque>
using name space std;
deque 对象的定义与初始化
deque<int> dq; //定义一个空 deque 对象
deque<int> dq(10); //定义一个具有 10 个元素的 deque 对象(int 型元素默认初始化为 0)
deque<int> dq(3,5); //dp = { 5, 5, 5 }
deque<int> dq_1(dp); //dq_1 = dp
deque<int> dq = { 1, 2, 3 };
deque<int> dq_1 = dq;
向 deque 对象添加元素
deque 与 vector 很相似,大部分的操作也类似。与 vector 不同的是,deque 对象支持在容器头部高效的插入元素。因此 deque 对象有一个成员函数来完成该操作
使用 push_front 在 deque 头部插入元素
deque<int> dp = { 1, 2, 3 };
dp.push_front(4); // dp = { 4, 1, 2, 3 };
使用 push_back 在 deque 尾部插入元素
deque<int> dp = { 1, 2, 3 };
dp.push_back(4); // dp = { 1, 2, 3, 4 };
使用 insert 在 deque 任意位置插入元素
插入单个元素
deque<int> dp = { 1, 2, 3 };
dp.insert(dp.begin(), 4); // dp = { 4, 1, 2, 3 };
插入一段元素
deque<int> dp = { 1, 2 };
deque<int> dp_1 = { 3, 4 };
dp_1.insert(dp_1.begin(), dp.begin(), dp.end()); // dp = { 1, 2, 3, 4 };
在循环中插入元素
插入元素通常会使迭代器失效,这会给在循环中插入元素带来不小的麻烦。insert 操作在插入元素成功后会返回插入位置的有效迭代器。
deque<int> dp = { 1, 2 };
deque<int> dp_1 = { 3, 4 };
auto it = dp_1.begin();
for (auto e:dp)
auto it = dp_1.insert(it, e);
// dp_1 = { 2, 1, 3, 4 };
删除 deque 中的一个元素
使用 pop_front 删除 deque 首元素
deque<int> dp = { 1, 2, 3 };
dp.pop_front(4); // dp = { 2, 3 };
使用 pop_back 删除 deque 尾元素
deque<int> dp = { 1, 2, 3 };
dp.pop_back(4); // dp = { 1, 2 };
使用 erase 删除 deque 中任意位置的元素
删除一个元素
deque<int> dp = { 1, 2, 3 };
dp.erase(dp.begin()); // dp = { 2, 3 };
删除一段元素
deque<int> dp = { 1, 2, 3, 4 };
dp.erase(dp.begin(), dp.begin()+2); // dp = { 3, 4 };
在循环中删除元素
删除元素通常会使迭代器失效,这会给在循环中删除元素带来不小的麻烦。erase 操作在插入元素成功后会返回插入位置的有效迭代器。
deque<int> dp = { 1, 2, 3, 4 };
auto it = dp.beign();
while (it!=dp.end()) {
//删除值为奇数的元素,跳过值为偶数的元素
if (*it%2)
auto it = dp.erase(it);
else
it++;
}
// dp = { 2, 4 };
访问查找 deque 中的元素
使用下标访问
像数组一样,deque 支持下标随机访问
deque<int> dp = { 1, 2, 3, 4 };
cout << dp[1]; // 输出 2
使用迭代器进行访问
deque<int> dp = { 1, 2, 3, 4 };
//将 dp 中值为奇数的元素置为 0
for (auto it=dp.begin(); it!=dp.end(); it++) {
if (*it%2)
*it = 0;
}
// dp = { 0, 2,0, 4};
使用 C++ 11 新特性访问
deque<int> dp = { 1, 2, 3, 4 };
//将 dp 中值为奇数的元素置为 0
for (auto n:dp) {
if (n%2)
cout << n;
}
// 输出:1 3
注意:这种方式得到的 n 是 dp 中元素的拷贝,若想要得到 dp 元素的本身,请使用 &
for (auto &n:dp)
查找一个元素是否在 deque 中
deque 没有查找元素存在性的成员函数,请使用顺序容器的通用方法。
最后
以上就是温暖镜子为你收集整理的C++ STL 之 deque的全部内容,希望文章能够帮你解决C++ STL 之 deque所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复