for循环中的C ++后缀增量;栈;组合物/委派

时间:2015-02-20 06:04:24

标签: c++ stack composition delegation

我搜索了类似的问题,但找不到我可以应用于我的情况。我有一个使用数组类作为数据成员的堆栈类。我在推送时测试它并在大小为5的堆栈上弹出'main()'(在这种情况下,数据成员'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 个答案:

答案 0 :(得分:0)

operator <<的代码只是打印堆栈的大小。所以你没有看到打印的任何堆栈值,只是大小。你只是不幸的是,堆栈的大小与你推动它的价值密切相关。

您期望operator <<做什么?也许它应该迭代堆栈内容并将它们全部打印出来?也许它只应该说&#34;堆栈大小:&#34;在堆栈大小之前,那将是显而易见的。