Постфиксный прирост C ++ в цикле for; стеки; Состав / делегации

Я искал похожие вопросы, но не мог найти тот, который мог бы применить к моей ситуации. У меня есть класс стека, использующий класс массива в качестве члена данных. Я тестирую его с помощью push и pop в ‘main ()’ в стеке размером 5 (в данном случае, элемент данных ‘Array m_array’). Я использую цикл for для заполнения стека с постфиксным инкрементом, но вместо того, чтобы вставить 0 в первый элемент, он выдвигает 1. Мой вывод:

1
2
3
4

3
2
1
0
-1
Stack is full(empty)

Но я хочу, чтобы это было

0
1
2
3...

В тесте:

int main()
{
try {
Stack<int> s(5);
for (int i = 0; i < 4; i++) {
s.Push(i);
cout << s << endl;
}

cout << endl;

for (int i = 0; i < 8; ++i) {
s.Pop();
cout << s << endl;
}
}

catch (ArrayException &ex)    //catch object
{
cout << ex.GetMessage() << endl;
}

catch(...)    //default catch
{
cout << "An unhandled exception has occurred" << endl;
}
return 0;
}

В stack.cpp:

#ifndef STACK_CPP
#define STACK_CPP
#include "stack.h"
namespace Jules
{
namespace Containers
{
template<typename T>    //default constructor
Stack<T>::Stack() : m_array(Array<T>()), m_current(0)
{
}

template<typename T>    //destructor
Stack<T>::~Stack()
{
}

template<typename T>    //copy constructor
Stack<T>::Stack(const Stack<T> &s) : m_array(s.m_array), m_current(s.m_current)
{
}

template<typename T>    //constructor with input argument
Stack<T>::Stack(const int i) : m_array(i), m_current(0)
{
}

template<typename T>    //assignment operator
Stack<T> Stack<T>::operator=(Stack<T> const &source)
{
if (this == &source)
return *this;
Stack<T>::operator = (source);
return *this;
}

template<typename T>    //push function
void Stack<T>::Push(const T& element)
{
m_array[m_current] = element;
++m_current;
}

template<typename T>    //pop function
void Stack<T>::Pop()
{
--m_current;
m_array[m_current];
}

template<typename T2>    //send to ostream
ostream& operator << (ostream& os, const Stack<T2>& t)
{
os << t.m_current;
return os;
}
}
}
#endif

-1

Решение

Код для вашего operator << просто печатает размер стека. Таким образом, вы не видите напечатанных значений стека, только размер. Вам просто не повезло, что размер стека так тесно коррелировал со значениями, которые вы давили на него.

Что бы вы ожидали operator << делать? Может, стоит перебрать содержимое стека и распечатать их все? Может быть, стоит просто сказать «Размер стека:» перед размером стека, тогда это будет очевидно.

0

Другие решения


По вопросам рекламы [email protected]