私はCourseraのコースを通してデータ構造について学び始めました。そして、配列を使ってスタックデータ構造を作ることができることを学びました。私が書いたことがスタックがするべきものなのかどうか疑問に思っていました。Stack(データ構造)の実装
#include <iostream>
using namespace std;
const int MAX_SIZE = 10000;
class Stack {
public:
Stack();
~Stack();
void push(int n);
void pop();
int top();
bool isEmpty() const;
void print() const;
private:
int* array [MAX_SIZE];
int curNum;
};
Stack::Stack() {
curNum = 0;
}
Stack::~Stack() {
for (int i = 0; i < curNum; ++i)
delete array[i];
}
void Stack::push(int n) {
if (curNum >= MAX_SIZE) {
cout << "reached maximum capacity...can't add an element\n";
return;
}
array[curNum] = new int(n);
curNum++;
}
void Stack::pop() {
delete array[curNum];
curNum--;
}
int Stack::top() {
return *array[curNum];
}
void Stack::print() const{
for (int i = 0; i < curNum; ++i)
cout << *array[i] << endl;
}
bool Stack::isEmpty() const{
return curNum == 0;
}
int main() {
Stack stack;
stack.push(5);
stack.print();
stack.pop();
}
また、多くの人がこの種のタスクに動的メモリ割り当てを使用していないことがわかります。理由はありますか?コンパイル時に配列のサイズを指定すると、メモリが不足したり、メモリが過剰に割り当てられたりする可能性があります。
スタックに物をプッシュして戻すテストアプリケーションを作成します。それは適切に機能しますか?私たちはコードテスターではありません。 –
10000 intポインタの配列がスタック上で80 KB、動的割り当てのオーバーヘッドが40 KB +オーバーヘッド(すべて使用されている場合)であることを考慮すると、不十分なメモリまたは過剰割り当てのメモリについて言及すると面白いが、10000 intの配列は40 KBスタック上に、それだけです。 – chris
@chrisああ、そうだけど、普通のintの代わりにクラスのオブジェクトがたくさんあったら? –