【发布时间】:2015-03-15 17:38:55
【问题描述】:
这是我的 Stack 类的一个小程序:
#include <iostream>
using namespace std;
#include <iomanip>
template <typename T>
class Stack
{
private:
T *stackPtr;
int size;
T top;
public:
Stack(int = 10);
~Stack();
bool push(const T );
bool pop();
void printStack();
};
int main()
{
Stack <int> myStack(5);
cout << "Push 5 elements to stack: ";
int ct = 0;
while (ct++ != 5)
{
int temp;
cin >> temp;
myStack.push(temp);
}
myStack.printStack();
cout << "\nErasing two elements:\n";
myStack.pop();
myStack.pop();
myStack.printStack();
return 0;
}
template <typename T>
Stack<T>::Stack(int s)
{
size = s > 0 ? s: 10;
stackPtr = new T[size];
top = -1;
}
template <typename T>
Stack<T>::~Stack()
{
delete [] stackPtr;
}
template <typename T>
bool Stack<T>::push(const T value)
{
if (top == size - 1)
return false;
top++;
stackPtr[top] = value;
return true;
}
template <typename T>
bool Stack<T>::pop()
{
if (top == - 1)
return false;
stackPtr[top] = 0;
top--;
return true;
}
template <typename T>
void Stack<T>::printStack()
{
for (int ix = size -1; ix >= 0; ix--)
cout << "|" << setw(4) << stackPtr[ix] << endl;
}
所以,为了使用这样的堆栈,我应该在使用前在构造函数中声明它的大小,就像Stack<int> newstack(10),如果我需要 10 个元素。那么,如果我不知道堆栈的最终大小,该怎么办?如何让它动态增长,只是通过向它推送元素?我一直在寻找解决方案,但我的所有想法仍然是计算元素,然后声明一个堆栈以适应元素数量。
【问题讨论】:
-
用链表代替数组。
标签: c++ class memory heap-memory stack-memory