Как распечатать содержимое std:: stack и вернуть его размер?
В c++ как я могу распечатать содержимое моего стека и вернуть его размер?
std::stack<int> values;
values.push(1);
values.push(2);
values.push(3);
// How do I print the stack?
4 ответов
вы можете сделать копию стека и поп-элементов один за другим, чтобы сбросить их:
#include <iostream>
#include <stack>
#include <string>
int main(int argc, const char *argv[])
{
std::stack<int> stack;
stack.push(1);
stack.push(3);
stack.push(7);
stack.push(19);
for (std::stack<int> dump = stack; !dump.empty(); dump.pop())
std::cout << dump.top() << '\n';
std::cout << "(" << stack.size() << " elements)\n";
return 0;
}
выход
19
7
3
1
(4 elements)
смотрите, он живет здесь:http://liveworkspace.org/code/9489ee305e1f55ca18c0e5b6fa9b546f
единственный способ распечатать элементы std::stack
не открывая их, чтобы написать адаптер, который расширяет std::stack
(вот пример). В противном случае вы должны заменить свой стек на std::deque
.
и std::stack
и std::queue
являются обертками вокруг общего контейнера. Этот контейнер доступен как protected
. Используя c
вы можете приобрести эффективное доступ к элементам; в противном случае вы можете просто скопировать стек или очередь и деструктивно получить доступ к элементам копии.
пример использования c
:
#include <iostream> // std::wcout, std::endl
#include <stack> // std::stack
#include <stddef.h> // ptrdiff_t
using namespace std;
typedef ptrdiff_t Size;
typedef Size Index;
template< class Elem >
Size nElements( stack< Elem > const& c )
{
return c.size();
}
void display( stack<int> const& numbers )
{
struct Hack
: public stack<int>
{
static int item( Index const i, stack<int> const& numbers )
{
return (numbers.*&Hack::c)[i];
}
};
wcout << numbers.size() << " numbers." << endl;
for( Index i = 0; i < nElements( numbers ); ++i )
{
wcout << " " << Hack::item( i, numbers ) << endl;
}
}
int main()
{
stack<int> numbers;
for( int i = 1; i <= 5; ++i ) { numbers.push( 100*i ); }
display( numbers );
}
http://www.cplusplus.com/reference/stl/stack/ для размера легко использовать :
cout << mystack.size();
в остальном я ничего не видел в документе, но вы должны распечатать содержимое своего стека, когда вы нажимаете его, или иметь список с ним, чтобы сохранить запись элемента только для того, чтобы распечатать его, не забудьте удалить его, когда вы закончите тестирование