Привет всем! Возникли небольшие проблемы с моим стеком. Я пытаюсь распечатать каждый элемент, который я поместил в стек.
Начиная со стека ctor, мы знаем, что у нас фиксированный размер массива. Поэтому я выделяю объект struct для элементов, занимающих столько места:
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;
}
Да, настоящая проблема для меня - это пункты [++ top] .n = n; заявление. Я пытался выяснить, как я могу перетащить (+) массив элементов, чтобы увидеть ВСЕ элементы массива после того, как я помещу их в стек.
Мне интересно, почему я не могу перетащить этот элемент items [++ top] .n = n при отладке. Все, что подходит, это значение, которое передается как параметр n. Нужно ли использовать массив типов объектов стека для хранения значений в?
Когда я перегружаю оператор << и пытаюсь распечатать элементы, я получаю безумно большое отрицательное число: </p>
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;
}
Я далеко, и мне нужно некоторое руководство, если у кого-то есть время!