c++ - 交换堆栈上的两个值

标签 c++ stack swap

我想交换 std::stack<double> 顶部的两个值.有没有比以下方法更好的方法?

void swap_top(std::stack<double>& stack)
{
  double a = stack.top();
  stack.pop();
  double b = stack.top();
  stack.pop();
  stack.push(a);
  stack.push(b);
}

最佳答案

对于普通堆栈,没有更好的方法。

有趣的是,stack 适配器实际上将底层容器公开为 protected 成员。这意味着您可以这样做:

template <typename T, typename Container = std::deque<T>>
class stack_ex : public std::stack<T, Container> {
public:
  using stack_ex::stack::stack;
  void swap_top() {
    auto last = c.rbegin();
    auto before_last = std::prev(last);
    std::iter_swap(last, before_last);
  }
};

关于c++ - 交换堆栈上的两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29694139/

相关文章:

c++ - docker构建失败: Not able to set the environment variables

c++ - 为内存损坏调试不可调试的应用程序

struct - 如何交换结构的两个字段

javascript - 使用 jQuery 交换 div 内容

java - 如何使用 JConsole 分析交换空间

c++ - 在 C++ 中处理 void 指针和 char

c++在任何时候写入流时执行函数

汇编语言 2 关于 Push 和 Pop 的书

c - 在研究缓冲区溢出时我应该使用哪个版本的 GCC 或标志?

c++ - LinkedStack 及其模板类