在C++编程中,双端队列(deque,全称double-ended queue)是一种非常实用的数据结构。它允许我们在容器的两端高效地进行插入和删除操作。本教程将带你从基础概念到实际代码,一步步理解并掌握 C++双端队列 的使用方法,即使你是编程小白也能轻松上手!

双端队列(deque)是一种线性数据结构,它结合了栈和队列的优点:
C++ 标准模板库(STL)已经为我们提供了高度优化的 std::deque 容器。你不需要自己从头实现,只需包含头文件即可使用。
首先,引入头文件:
#include <deque>#include <iostream>using namespace std;下面是一个完整的 C++ STL deque 使用示例,涵盖基本操作:
#include <deque>#include <iostream>using namespace std;int main() { deque<int> dq; // 在尾部添加元素 dq.push_back(10); dq.push_back(20); // 在头部添加元素 dq.push_front(5); dq.push_front(1); // 输出当前deque内容 cout << "Deque elements: "; for (int x : dq) { cout << x << " "; } cout << endl; // 输出: 1 5 10 20 // 访问首尾元素 cout << "Front: " << dq.front() << ", Back: " << dq.back() << endl; // 删除首尾元素 dq.pop_front(); dq.pop_back(); cout << "After pop: "; for (int x : dq) { cout << x << " "; } cout << endl; // 输出: 5 10 return 0;}- vs vector:vector 在尾部操作高效,但头部插入/删除是 O(n);而 deque 在两端都是 O(1)。
- vs list:list 支持任意位置 O(1) 插入,但不支持随机访问;deque 支持下标访问(如 dq[2]),且内存更连续,缓存友好。
虽然实际开发中推荐使用 STL 的 std::deque,但为了加深理解,我们可以用动态数组模拟一个简易版 deque(仅用于学习):
#include <iostream>#include <vector>using namespace std;class SimpleDeque {private: vector<int> data;public: void push_front(int val) { data.insert(data.begin(), val); } void push_back(int val) { data.push_back(val); } void pop_front() { if (!data.empty()) data.erase(data.begin()); } void pop_back() { if (!data.empty()) data.pop_back(); } int front() { return data.front(); } int back() { return data.back(); } bool empty() { return data.empty(); } size_t size() { return data.size(); }};// 注意:这个实现效率较低(insert/erase 开销大),仅用于理解概念⚠️ 提醒:上述自定义版本不推荐用于生产环境,因为 vector::insert 在开头操作的时间复杂度是 O(n)。真正的 std::deque 内部采用分段连续内存块实现,保证两端操作均为 O(1)。
通过本教程,你已经掌握了:
记住,在实际项目中,请优先使用标准库提供的 std::deque,它经过高度优化,安全且高效。希望这篇 双端队列教程 对你有所帮助!
本文由主机测评网于2025-12-09发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125157.html