c++stl双端队列
时间: 2025-06-07 17:41:37 浏览: 27
### C++ STL 中 `deque` 使用方法
#### 创建与初始化
`deque` 是一种双端队列容器,支持快速插入和删除元素。创建并初始化一个 `deque<int>` 类型的对象非常简单:
```cpp
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> d = {1, 2, 3, 4, 5};
}
```
此代码片段展示了如何通过列表初始化来定义一个包含五个整数的 `deque` 对象[^1]。
#### 遍历 `deque`
为了遍历整个 `deque` 并输出其中的内容,可以利用索引访问的方式来进行:
```cpp
for (size_t i = 0; i < d.size(); ++i) {
cout << d[i] << " ";
}
cout << endl;
```
这段程序会依次打印出每一个存储于 `deque` 内的数据项。
#### 插入新元素
向 `deque` 添加新的成员既可以在尾部也可以在头部完成,分别对应的方法是 `push_back()` 和 `push_front()`:
```cpp
d.push_back(6);
d.push_front(-1);
// 输出更新后的 deque
printDeque(d); // 假设已定义好 printDeque 函数用于显示 deque 的内容
```
上述例子中,在原有基础上增加了两个数值 `-1` 和 `6` 到两端位置上[^2]。
#### 移除现有元素
当需要移除最前端或最后面的一个元素时,则应调用相应的函数 `pop_front()` 或者 `pop_back()` 来执行该操作:
```cpp
if (!d.empty()) {
d.pop_front();
}
if (!d.empty()) {
d.pop_back();
}
```
这里先判断了 `deque` 是否为空以防越界错误发生后再做处理。
#### 排序功能
尽管 `deque` 自身并不提供内置排序机制,但是借助标准库中的算法如 `sort()` 即可轻松实现这一目的:
```cpp
void testSort() {
deque<int> d{50, 30, 90, 15, 100, 88};
cout << "排序前:" << endl;
printDeque(d);
sort(d.begin(), d.end());
cout << "排序后:" << endl;
printDeque(d);
}
```
在这个测试案例里,先是展示未经过整理排列之前的序列形式;接着运用全局模板函数 `std::sort` 进行升序调整;最终再次呈现已经有序的结果集给用户查看。
#### 只读模式下的迭代器应用
对于那些希望保持不可变性的场景来说,使用带有 `const` 关键字限定符声明出来的迭代器将是明智的选择之一:
```cpp
void printDeque(const deque<int>& d) {
for (auto it = cbegin(d); it != cend(d); ++it) {
cout << *it << ' ';
}
cout << '\n';
}
```
这里的 `cbegin()` 和 `cend()` 方法返回的是常量类型的迭代器对象,意味着它们所指向的位置上的任何改变都将受到保护而无法被执行[^3]。
阅读全文
相关推荐




















