堆栈的char问题

时间:2013-04-11 18:37:25

标签: c++ char stack

我正在学习如何创建堆栈和链接列表。我现在正在编写的程序专注于模板堆栈类。当我创建一堆int时,一切都很顺利,但是当我开始实现一堆char时,我的程序开始崩溃。具体来说,当我尝试在char的堆栈上实现pop动作时,它开始变得混乱。

你能否确认一下我是否正确地做了这件事,还让我知道我对char堆栈做错了什么?

这是我的代码:

#include<iostream>
using namespace std;

#ifndef STACK_H
#define STACK_H

//STACK CLASS
template<typename T>
class Stack
{
 public:
        Stack(int = 10);
        ~Stack(){ delete stackPtr;};

        bool isEmpty() const
        { return top == -1; }

        bool isFull() const
        { return top == size - 1; }

        //push and pop
        bool push(const T&);
        bool pop(T&);

 private:
         int size;
         int top;
         T *stackPtr;
};

//CONSTRUCTOR
template<typename T>
Stack<T>::Stack(int newSize)
     : top(-1), size(newSize), 
     stackPtr(new T[size]) //allocate array using ptr ********
{
     //empty constructor
};

//PUSH VALUES ONTO STACK
template<typename T>
bool Stack<T>::push(const T &pushVal)
{
     if(!isFull())
     {
            stackPtr[++top] = pushVal;
            return true;      
     }

     return false;
};

//POP VALUES OFF OF STACK
template<typename T>
bool Stack<T>::pop(T &popVal)
{
     if(!isEmpty())
     {
            popVal = stackPtr[top--];
            return true;              
     }

     return false;
};

#endif

//DRIVER
int main()
{
    //STACK OF INT
    Stack<int> intStack(5);
    int intValue = 1;

    cout << "Pushing values onto intStack: " << endl;

    while(intStack.push(intValue))
    {
        cout << intValue << ' ';
        intValue++;                               
    }
    cout << "\nStack is full, cannot push..."
         << endl << endl;

    cout << "Popping values off of intStack: " << endl;

    while(intStack.pop(intValue))
         cout << intValue << ' ';

    cout << "\nStack is empty, cannot pop..."
         << endl;

    //STACK OF CHAR
    Stack<char> charStack(5);
    string greeting = "hello";
    int strSize = greeting.length();

    cout << "\nPushing values onto charStack: " << endl;

    for(int i = 0; i < strSize; i++)
    {
         charStack.push(greeting.at(i));
         cout << greeting.at(i) << ' ';
    }        

    cout << endl;

    cout << "Popping values off of charStack: " << endl;

    for(int i = (strSize - 1); i >= 0; i++) //PROBLEM OCCURS
    {
            charStack.pop(greeting.at(i));
            cout << greeting.at(i) << ' ';        
    }

    system("pause");   
}

2 个答案:

答案 0 :(得分:3)

for(int i = (strSize - 1); i >= 0; **i--**) //PROBLEM not anymore
{
        charStack.pop(greeting.at(i));
        cout << greeting.at(i) << ' ';        
}

答案 1 :(得分:2)

可能它不是您特定问题的根源,但您确实应该使用它 delete[] stackPtr 而不是你的析构函数中的delete stackPtrWikipedia explains why