📜  C++ STL中的双端队列(1)

📅  最后修改于: 2023-12-03 14:59:47.132000             🧑  作者: Mango

C++ STL中的双端队列(Deque)

双端队列(deque)是C++标准模板库(STL)中的一种数据结构,它是一种可以在两端进行插入和删除操作的队列。

概述

双端队列是一种序列容器,具有动态大小的数组,可以在两端进行高效的插入和删除操作。双端队列支持在队列的任一端插入和删除元素,并且可以在常数时间内随机访问任意位置的元素。

在C++中,双端队列通过#include <deque>引入,并位于std命名空间中。它是C++标准模板库(STL)提供的一种容器。

特点
  • 双端队列允许在队列的两端进行高效的插入和删除操作。
  • 可以在常数时间内随机访问双端队列中的任意元素。
  • 支持动态大小,即可以根据需要自动调整内部数组的大小。
  • 和向量(vector)相比,双端队列在两端进行插入和删除操作的时间复杂度更低。
  • 双端队列的迭代器支持随机访问。
基本操作
创建双端队列
#include <deque>

std::deque<int> myDeque;  // 创建一个空的双端队列
在队列两端插入元素

可以使用push_front在队列的前端插入元素,使用push_back在队列的后端插入元素。

myDeque.push_front(4);   // 在队列的前端插入元素4
myDeque.push_back(7);    // 在队列的后端插入元素7
在队列两端移除元素

可以使用pop_front移除队列的第一个元素,使用pop_back移除队列的最后一个元素。

myDeque.pop_front();   // 移除队列的第一个元素
myDeque.pop_back();    // 移除队列的最后一个元素
获取队列首尾元素

可以使用front获取队列的第一个元素,使用back获取队列的最后一个元素。

int firstElement = myDeque.front();   // 获取队列的第一个元素
int lastElement = myDeque.back();     // 获取队列的最后一个元素
遍历双端队列

可以使用范围for循环或迭代器来遍历双端队列中的元素。

for (int num : myDeque) {
    // 对队列中的每个元素执行操作
}

// 或者使用迭代器
for (auto it = myDeque.begin(); it != myDeque.end(); ++it) {
    int num = *it;
    // 对队列中的每个元素执行操作
}
其他操作
  • size:返回双端队列中元素的数量。
  • empty:检查双端队列是否为空。
  • clear:清空双端队列中的所有元素。
使用场景

双端队列在以下情况下非常有用:

  • 需要在队列的两端进行插入和删除操作。
  • 需要随机访问队列中的元素。
  • 需要一个比向量更高效的容器,特别是当需要在队列两端频繁插入和删除元素时。

由于双端队列的实现方式和向量类似,但在两端插入和删除操作上更高效,所以在需要快速在队列两端进行插入和删除操作的情况下,双端队列是一个很好的选择。

结论

双端队列是C++ STL中的一种非常有用的容器,通过提供在队列两端进行高效插入和删除操作的能力,使得编程变得更加方便和高效。在需要同时满足随机访问和高效插入/删除操作的场景下,双端队列是一个很好的选择。

参考链接: