0

我正在学习如何创建堆栈和链表。我现在正在编写的程序专注于模板堆栈类。当我制作了一堆 . 时一切都很顺利int,但是当我开始实现char. 具体来说,当我尝试在char.

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");   
}
4

2 回答 2

3
for(int i = (strSize - 1); i >= 0; **i--**) //PROBLEM not anymore
{
        charStack.pop(greeting.at(i));
        cout << greeting.at(i) << ' ';        
}
于 2013-04-11T18:41:49.483 回答
2

可能它不是您特定问题的根源,但您确实应该 在析构函数中使用delete[] stackPtr 而不是。维基百科解释了原因delete stackPtr

于 2013-04-11T18:47:58.590 回答