用两个vector实现一个队列,C++
时间: 2024-02-11 08:39:36 浏览: 117
C++实现一个队列
4星 · 用户满意度95%
++版的实现方式是什么?
你好!感谢你向我提出问题。针对你的问题,我们可以采用以下方式实现用两个vector实现一个队列的C++版本:
```c++
#include<iostream>
#include<vector>
using namespace std;
class Queue {
private:
vector<int> in_stack;
vector<int> out_stack;
public:
Queue() {}
void push(int x) {
in_stack.push_back(x);
}
int pop() {
if (out_stack.empty()) {
while (!in_stack.empty()) {
out_stack.push_back(in_stack.back());
in_stack.pop_back();
}
}
int x = out_stack.back();
out_stack.pop_back();
return x;
}
bool empty() {
return in_stack.empty() && out_stack.empty();
}
int size() {
return in_stack.size() + out_stack.size();
}
};
int main() {
Queue q;
q.push(1);
q.push(2);
q.push(3);
cout << q.pop() << endl;
cout << q.pop() << endl;
cout << q.pop() << endl;
return 0;
}
```
在上述代码中 Queue 类中包含两个 vector 类型的变量:in_stack 和 out_stack。其中 in_stack 代表队列的输入栈,out_stack 代表队列的输出栈。队列中的每个元素都是先从 in_stack 中 push 进去,但是当需要 pop 元素时,则将 in_stack 中的元素全部倒入 out_stack 中,并从 out_stack 中 pop 出栈顶元素,即为队列的头元素。
需要注意的是,当 out_stack 不为空时,直接从 out_stack 中 pop 元素,而不必将 in_stack 中的元素全部倒入 out_stack 中,从而大大提高了代码的效率。
希望我的解答对你有所帮助。如果你有其他问题,欢迎继续向我提问。
阅读全文