You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ LIFO队列实现:如何将FIFO队列转为后进先出模式?

如何将C++ FIFO队列代码修改为LIFO(栈)实现?

嘿,这个问题解决起来超简单!C++标准库已经为我们提供了专门实现**后进先出(LIFO)**行为的容器,完全不用自己手动造轮子。

最简便的实现方法:直接用std::stack

你原来的代码用的是std::queue(标准FIFO队列容器适配器),要改成LIFO只需要做几处微小的修改:

  • 将queue<string> q;替换为stack<string> q;
  • 将访问队首元素的q.front()替换为访问栈顶元素的q.top()(栈的核心是操作最后入栈的元素)
  • 其余的push()、pop()、empty()方法调用逻辑完全不变,因为std::stack也提供了一致的接口

修改后的完整代码如下:

#include <iostream>
#include <stack>
#include <string>

using namespace std;

int main(){
    stack<string> q;
    cout << "Pushing one two three four\n";
    q.push("one");
    q.push("two");
    q.push("three");
    q.push("four");
    cout << "Now, retrieve those values in LIFO order.\n";
    while(!q.empty()) {
        cout << "Popping ";
        cout << q.top() << "\n";
        q.pop();
    }
    cout << endl;
    return 0;
}

运行效果说明

原来的FIFO队列会按one → two → three → four的顺序弹出元素,而修改后的LIFO栈会按four → three → two → one的顺序弹出,完美符合后进先出的要求。

额外补充:手动模拟栈的备选方案

如果出于特殊需求不想用std::stack,也可以用std::vector或std::deque手动模拟栈行为:

  • 用push_back()代替push()添加元素
  • 用back()代替top()访问栈顶元素
  • 用pop_back()代替pop()移除栈顶元素

不过这种方法完全没必要,因为std::stack是标准库专门为LIFO场景优化设计的,代码可读性和维护性都更优。

内容的提问来源于stack exchange,提问作者Dennis Vymer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:53:45