std::deque和std::queue
std::deque是C++ STL的双端队列容器,支持在队列头尾进行插入和删除操作,可以当做栈、队列或双向队列使用。std::queue是基于std::deque实现的队列容器,支持在队列尾进行插入,在队列头进行删除操作。以下是std::deque和std::queue的例子:
在std::deque的队尾插入元素、在队头插入元素、删除队头元素[^1]
std::deque<int> myDeque({ 1, 2, 3 }); myDeque.push_back(4); // 在队尾插入元素 myDeque.push_front(0); // 在队头插入元素 myDeque.pop_front(); // 删除队头元素
使用std::queue在队尾插入元素、在队头删除元素
std::queue<int> myQueue({ 1, 2, 3 }); myQueue.emplace(4); // 在队尾插入元素 myQueue.push(5); // 在队尾插入元素 myQueue.pop(); // 删除队头元素
参考资料:
: C++ STL queue和deque容器用法详解。https://www.jianshu.com/p/102f7f8839b0 [^2]: C++ STL之queue和deque用法详解。https://blog.csdn.net/shrek11/article/details/86619842
std::deque 和 std::queue区别
std::deque
和 std::queue
是 C++ STL 中的两个不同的容器。
std::deque
是一个双端队列,也就是说它支持在队列的两端进行插入和删除操作。它的实现基于动态数组,因此可以在两端进行常量时间的插入和删除操作。它还支持随机访问,也就是说可以通过下标索引访问其中的元素。
std::queue
是一个队列,它是在 std::deque
的基础上实现的。它只支持在队列的一端进行插入和删除操作,即尾部插入,头部删除。因此,它不支持随机访问,也就是说不能通过下标索引访问其中的元素。
总结来说,std::deque
是一个灵活的双端队列,可以在队列的两端进行插入和删除操作,支持随机访问。而 std::queue
是一个只允许在队列尾部插入,队列头部删除的队列,没有随机访问的能力。
std::deque头文件
std::deque
(双端队列)是C++标准库中的一个容器,它提供了一种既能从两端高效添加或删除元素的数据结构。它的名字来源于英文的"double-ended queue"。#include <deque>
这行预处理指令用于包含deque
相关的功能和模板。
std::deque
的特点包括:
- 随机访问:通过索引可以快速访问队列中的元素,类似于数组。
- 双向操作:既可以从前向后添加(push_back)或删除(pop_front),也可以从后向前(push_front)或删除(pop_back)。
- 效率适中:对于插入和删除操作,尤其是在队列中部,比动态数组(vector)更有效率。
- 空间利用率:内部数据结构通常比固定大小的数组更为节省空间,因为它可以根据需要动态调整大小。
使用std::deque
的一般步骤包括:
- 包含头文件
: #include <deque>
- 创建deque对象:
std::deque<T> dequeName;
- 插入元素:
dequeName.push_back(element);
或dequeName.push_front(element);
- 删除元素:
dequeName.pop_back();
或dequeName.pop_front();
- 访问元素:
T element = dequeName.front();
或T element = dequeName.back();