C ++标准库试图为所有容器提供尽可能统一的接口。然而,一只黑羊伸出来:
#include <algorithm>
#include <stack>
int main()
{
std::stack<int> s;
std::reverse(std::begin(s), std::end(s));
}
我无法使用这种常用的习惯用法来反转容器,因为堆栈不是容器:它是一个适配器。因此,它没有begin
或end
个函数。
我必须做这样的事情:
std::stack<int> s;
std::stack<int> s2;
while (!s.empty())
{
s2.push(s.top());
s.pop();
}
while (!s2.empty())
{
s2.top(); // do something with it
s2.pop();
}
这样做的“标准”方法是什么?请不要使用临时黑客或错综复杂的方法。