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 没有查找元素存在性的成员函数,请使用顺序容器的通用方法。

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