我對C++相當陌生,對指針也很陌生。我目前正在研究一個堆棧,並試圖重新分配堆棧的內存,因爲堆棧的大小達到頂端,但是我遇到了問題。我已經在Google和堆棧溢出方面做了很多研究,並且發現了一些有用的信息,但是因爲我對堆棧和C++都很陌生,所以我仍然遇到問題。我希望一些明亮而聰明的人至少能指引我朝着正確的方向前進。動態堆棧內存重新分配
現在...這是我的代碼。
#include <iostream>
#define STACKMAX 20
using namespace std;
template <class T> class StackTemplated {
private:
int top;
T values[STACKMAX];
public:
StackTemplated();
void push(T i);
T pop(void);
bool empty(void);
};
template <class T> StackTemplated<T>::StackTemplated() {
top = -1;
}
template <class T>void StackTemplated<T>::push(T i) {
if (top == STACKMAX - 1) {
// reallocate top of stack. (this is the area I'm having issues)
char * string1;
string1 = (char *)calloc(STACKMAX, sizeof(char));
if (top == STACKMAX - 1) {
cout << "The stack didn't re-allocate.";
exit(1);
}
} else {
top++;
values[top] = i;
}
}
template <class T> T StackTemplated<T>::pop(void) {
if (top < 0) {
printf("%", "Stack underflow!");
exit(1);
} else {
return values[top--];
}
}
template <class T> bool StackTemplated<T>::empty() {
return (top == -1);
}
請注意,「C/C++」不是一種語言。 C和C++是獨立的語言;在這種情況下,您正在使用C++。 – Cameron
我已經刪除了問題和標籤中對C的引用。 –
讓'pop()'返回一個對象以及彈出一個對象是一個相當不好的設計。這使得以異常安全的方式使用堆棧非常困難(這使得強壯的異常安全保證特別難以實現),因爲從堆棧中彈出該值(其修改堆棧)的操作之後是操作將返回值複製到調用者的代碼中(可能會拋出)。 (有關此事的更多討論,請參見[這裏](http://www.gotw.ca/gotw/008.htm)。) – Mankarse