Стандартная библиотека 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();
}
Что это за «стандартный» способ? Пожалуйста, никаких специальных приемов или запутанных методов.
std::swap(s, s2)
. Вы также можете просто использоватьstd::vector
вместоstd::stack
, если вам нужно реверсирование на месте - person Niklas B.   schedule 05.05.2016std::reverse
на нем. - person rozina   schedule 05.05.2016