我想交换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); } };