C++ STL 之 deque

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章