Вопрос
Всем привет!У меня небольшая проблема с моим стеком.Я пытаюсь распечатать каждый элемент, который я положил в стек.
Начиная с вектора стека, мы знаем, что у нас есть фиксированный размер массива.Поэтому я выделяю объект структуры items так, чтобы он вмещал ровно столько места:
stack::stack(int capacity)
{
items = new item[capacity];
if ( items == NULL ) {
throw "Cannot Allocoate Sufficient Memmory";
exit(1);
}
maxSize = capacity;
top = -1;
}
Да, items — это тип структуры объекта «item».Взгляни:
class stack
{
stack(int capacity);
~stack(void);
...
private:
int maxSize; // is for the item stack
int top; // is the top of the stack
struct item {
int n;
};
item *items;
public:
friend ostream& operator<<(ostream& out, stack& q)
...
Прежде всего, мы хотим добавить в стек, помещая каждый входящий элемент в массив FILO:
bool stack::pushFront( const int n )
{
if ( top >= maxSize-1 )
{
throw "Stack Full On Push";
return false;
}
else
{
++top;
items[top].n = n;
}
return true;
}
// just a textbook example here:
stack::~stack(void)
{
delete [] items;
items = NULL;
maxSize = 0;
top = -1;
}
Да, настоящая проблема для меня — это items[++top].n = n;заявление.Я пытался выяснить, как я могу перетащить (+) массив элементов, чтобы увидеть ВСЕ элементы массива после того, как я поместил их в стек.
Мне интересно, почему я не могу перетащить этот оператор items[++top].n = n во время отладки.Все, что появляется, — это значение, передаваемое как параметр «n».Нужно ли мне использовать массив типов объектов стека для хранения значений?
Когда я перегружаю оператор << и пытаюсь напечатать элементы, я получаю безумно большое отрицательное число:
ostream& operator<<(ostream& out, stack& q)
{
if ( q.top <= 0 ) // bad check for empty or full node
out << endl << "stack: empty" << endl << endl;
else
for ( int x = 0; x < q.maxSize; x++ )
{
out << q.items[x].n; // try to print elements
}
return out;
}
Я далеко, и мне нужен совет, если у кого-то есть время!
Решение
В перегруженном операторе << в цикле for вы выполняете итерацию максимального размера.Но вы, возможно, не поместили элементы maxsize в стек.Вам следует повторить лучшие результаты.Кроме того, напишите конструктор по умолчанию для структуры элементов и инициализируйте все переменные, чтобы не получать мусорные значения при попытке их распечатать.
Другие советы
При печати стопки вы должны идти только вверх, а не до maxSize.