【C++】STL之容器适配器——使用deque适配stack和queue
发布人:shili8
发布时间:2025-02-12 04:57
阅读次数:0
**容器适配器**
在 C++ 中,标准模板库 (STL) 提供了许多容器类,如 `vector`、`list`、`map` 等。这些容器类提供了一种高效的数据结构来存储和操作数据。但是,有时我们需要对这些容器进行一些特殊处理,比如实现栈或队列的行为。在这种情况下,我们可以使用容器适配器。
**deque 适配器**
`deque` 是一种双端队列,提供了高效的随机访问和插入/删除操作。我们可以使用 `deque` 来实现栈和队列的行为。
### 使用 deque 实现栈栈是一种后进先出 (LIFO) 的数据结构,我们可以使用 `deque` 来实现栈的行为。具体来说,我们只需要在 `push_back` 和 `pop_front` 操作中进行一些调整即可。
cpp#include <iostream> #include <deque> class Stack { public: void push(int value) { data.push_back(value); } int pop() { if (data.empty()) return -1; // empty stack int top = data.front(); data.pop_front(); return top; } private: std::deque<int> data; }; int main() { Stack s; s.push(10); s.push(20); std::cout << s.pop() << std::endl; //20 std::cout << s.pop() << std::endl; //10 return0; }
在这个例子中,我们使用 `deque` 来实现栈的行为。我们只需要在 `push_back` 和 `pop_front` 操作中进行一些调整即可。
### 使用 deque 实现队列队列是一种先进先出 (FIFO) 的数据结构,我们可以使用 `deque` 来实现队列的行为。具体来说,我们只需要在 `push_back` 和 `pop_front` 操作中进行一些调整即可。
cpp#include <iostream> #include <deque> class Queue { public: void push(int value) { data.push_back(value); } int pop() { if (data.empty()) return -1; // empty queue int front = data.front(); data.pop_front(); return front; } private: std::deque<int> data; }; int main() { Queue q; q.push(10); q.push(20); std::cout << q.pop() << std::endl; //10 std::cout << q.pop() << std::endl; //20 return0; }
在这个例子中,我们使用 `deque` 来实现队列的行为。我们只需要在 `push_back` 和 `pop_front` 操作中进行一些调整即可。
**总结**
在本文中,我们使用 `deque` 适配器来实现栈和队列的行为。通过对 `push_back` 和 `pop_front` 操作的调整,我们可以轻松地实现这些数据结构的行为。这是 C++ 中容器适配器的一个例子,展示了如何使用标准模板库提供的容器类来实现特殊的数据结构。
**参考**
* 《C++ Primer》第5 章:容器* 《Effective C++》第3 章:使用容器类**注释**
本文中的代码示例和注释仅供参考,旨在帮助读者理解容器适配器的概念。