Stack::print
показывает текущий «магазин моментальных снимков» вашего стека, поэтому он не имеет никакого дела с изменением какой-либо из переменных-членов Stack
.Нет необходимости делать «резервную копию» стека и восстанавливать его.Вам просто нужно пройтись по стеку так, чтобы он не мешал стеку.
Вместо того, чтобы переменная-член top
проходила по стеку, инициализируйте локальный указатель Node
таким жекак top
и заставить локальный указатель идти по стеку.
Другими словами, top
должен быть только для чтения (неизменяемым) в вашей функции-члене print
.Чтобы убедиться, что функция-член не должна изменять никакие переменные-члены, вы можете сделать функцию-член неизменной, добавив ключевое слово const
в конце объявления функции-члена.
Пример:
// Const member function enforces that the Stack remain unmodified
void Stack::print() const
{
Node *p = top; // Make p initially point to the top of the stack
Type x;
while(p != NULL) {
x = p -> getinfo();
cout << " " << x.color << " " << " " << x.counter << endl << endl;
p = p->getNext(); // Make p walk down the stack to the next Node.
}
}