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 沒有查找元素存在性的成員函數,請使用順序容器的通用方法。