【问题标题】:How Can I return second element of stack without pop() function in C++?如何在 C++ 中返回没有 pop() 函数的堆栈的第二个元素?
【发布时间】:2011-09-08 06:01:34
【问题描述】:

在没有 pop() 的情况下返回堆栈的第二个元素需要帮助吗?但是不知道怎么用。

我的代码:

stack<int> st;
st.push(10);
st.push(20);
st.top(); // return 20

我怎样才能让这个函数在没有 pop() 的情况下返回 10;

谢谢。

附:对不起我的英语。

【问题讨论】:

  • 不能使用 pop() 是一种奇怪的人为限制。如果这是一个家庭作业或面试问题,我认为您遗漏了一些内容,因为到目前为止您发布的内容没有解决方案。

标签: c++ data-structures stack


【解决方案1】:

我想您是在尝试模拟基于堆栈的机器?

这是使用 std::stack 的唯一方法:

stack<int> st;
st.push(10);
st.push(20);
int top = st.top(); // return 20
st.pop();
int second = st.top(); // return 10
st.push(top);

如果您想要其他行为,您必须自己实现具有更多功能的stack

【讨论】:

    【解决方案2】:

    stack 不能这样做,因为它应该是 LIFO,如果你想要这样的行为,请使用其他顺序容器,例如 vectordequelist

    【讨论】:

    • 同意,他应该只使用矢量。方法 push_back 和 pop_back 对于模拟堆栈很有用,+ 他可以做很多其他有用的事情。我什至不知道为什么标准被 std::stack 的存在污染了。
    【解决方案3】:

    如果要检索第二个元素,为什么需要stack 作为表示?堆栈是 LIFO 表示,因此理论上您不会检索 第二个元素,只检索添加的最后一个。

    使用其他表示,例如提到的@Naveen。

    【讨论】:

      【解决方案4】:

      如果你这样做,根据定义,它将不再是一个堆栈。

      【讨论】:

      • 没有人会说处理器没有堆栈,但您可以随时访问处理器堆栈的任何元素(在大多数流行的架构上)。
      猜你喜欢
      • 1970-01-01
      • 2015-04-23
      • 2016-10-24
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 2021-03-18
      • 1970-01-01
      相关资源
      最近更新 更多