c – 在堆栈上交换两个值

前端之家收集整理的这篇文章主要介绍了c – 在堆栈上交换两个值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想交换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);
}

解决方法

使用普通堆栈,没有更好的方法.

有趣的是,堆栈适配器实际上将底层容器暴露为受保护的成员.这意味着你可以这样做:

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&C++相关文章