動的配列
配列に関するこれまでのコースでは、次のような配列の作成について説明しました。
const int Nmax = 1000;
int A[Nmax];
またはこれ:
intA[1000];
このメソッドは静的配列を作成します。欠点の 1 つは、プログラムの実行中に配列要素のサイズと型を変更できないことです。
上の例では、1000 要素の静的配列が作成されます。つまり、int
型の 1000 個の要素 (int
型の 1000 個の要素の配列) を格納する領域がメモリ内に割り当てられます。配列の先頭のアドレスは A
変数に保存されます。 1000 要素を超える配列を処理する必要がある場合は、説明を変更してプログラムを再コンパイルする必要があります。小さな配列を操作する場合、静的配列に割り当てられたメモリのほとんどが無駄になります。
コンピュータのメモリを効率的に使用するには、メモリを動的に割り当てる必要があります。つまり、プログラムの実行中(新しいオブジェクトの作成中)に必要に応じてオブジェクト用のメモリを確保する
必要があります。
C++ では、 new
および delete
オペレーションは、コンピュータ メモリを動的に割り当てるように設計されています。オペレーション新規
空きメモリ領域からメモリを割り当て、delete
操作で割り当てられたメモリの割り当てを解除します。
動的変数の作成と削除の例
int *A = 新しい int; // int型のオブジェクトを作成します
*A = 15; // オブジェクトの初期化はポインタ (*) を通じて行われます
// 初期化はすぐに実行できます
// 動的オブジェクトを宣言する場合
int *B = 新しい int(25);
cout << *A <<; " " << *B; // ポインタによる値を出力
削除A; // 割り当てられたメモリを解放しました
B を削除;
new
オペレーションは、指定されたタイプのオブジェクトを作成し、そのオブジェクトにメモリを割り当て、指定されたメモリ位置への正しいタイプのポインタを返します。空き領域がないなど、メモリを割り当てられない場合は、ヌル ポインタが返されます。つまり、ポインタは値 0 を返します。メモリ割り当ては、どのデータ型でも可能です。 int
、float
、double
、char
など
同様に、C++ では、動的メモリ割り当てを使用する動的配列を作成できます。このような配列のサイズ。プログラムの実行中に、たとえばキーボードから動的変数を作成するために使用できます。
C 構文の場合
intN;
scanf("%d", &N);
int *mas = malloc (sizeof(int) * N);
// 後で配列のサイズを変更します
// realloc
によって使用されます。
...
無料(マス); // 割り当てられたメモリを解放します
プレ>
C++ 構文の場合
intN;
シン>> N;
int*A = 新しい int[N];
// 配列のサイズを変更するには、
// データを別の配列に転送し、古い配列をクリアします
...
削除 []マス; // 割り当てられたメモリを解放します
// 角括弧は次のことを示します
// 配列の下からメモリを解放していること
プレ>