例による配列の C++ 動的割り当て
動的配列とは?
動的配列は通常の配列と非常に似ていますが、そのサイズはプログラムの実行時に変更できます。 DynamArray 要素は連続したメモリ ブロックを占有します。
配列が作成されると、そのサイズは変更できません。ただし、動的配列は異なります。動的配列は、いっぱいになった後でもサイズを拡張できます。
配列の作成中に、あらかじめ決められた量のメモリが割り当てられます。これは動的配列には当てはまりません。動的配列は、必要に応じてメモリ サイズを一定の割合で拡大するからです。
この C++ チュートリアルでは、次のことを学びます
- 動的配列とは?
- 動的配列のパフォーマンスに影響を与える要因
- 新しいキーワード
- 動的に割り当てられた配列の初期化
- 配列のサイズ変更
- 配列の動的削除
動的配列のパフォーマンスに影響を与える要因
アレイの初期サイズとその成長係数によって、そのパフォーマンスが決まります。次の点に注意してください:
<オール>新しいキーワード
C++ では、new キーワードを使用して動的配列を作成できます。割り当てられるアイテムの数は、一対の角括弧内に指定されます。型名はこれに先行する必要があります。要求された数のアイテムが割り当てられます。
構文:
新しいキーワードの構文は次のとおりです:
pointer_variable = new data_type;
pointer_variable はポインター変数の名前です。
data_type は有効な C++ データ型でなければなりません。
次に、キーワードは最初の項目へのポインターを返します。動的配列を作成したら、delete キーワードを使用して削除できます。
例 1:
#include<iostream> using namespace std; int main() { int x, n; cout << "Enter the number of items:" << "\n"; cin >>n; int *arr = new int(n); cout << "Enter " << n << " items" << endl; for (x = 0; x < n; x++) { cin >> arr[x]; } cout << "You entered: "; for (x = 0; x < n; x++) { cout << arr[x] << " "; } return 0; }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>注:上記の例では、ユーザーは実行時に配列の任意のサイズを指定できます。これは、配列のサイズが実行時に決定されることを意味します .
動的に割り当てられた配列の初期化
動的配列を 0 に初期化するのは簡単です。
構文:
int *array{ new int[length]{} };
上記の構文で、長さは配列に追加される要素の数を示します。配列を 0 に初期化する必要があるため、これは空のままにしておく必要があります。
初期化子リストを使用して動的配列を初期化できます。これを示す例を作成しましょう。
例 2:
#include <iostream> using namespace std; int main(void) { int x; int *array{ new int[5]{ 10, 7, 15, 3, 11 } }; cout << "Array elements: " << endl; for (x = 0; x < 5; x++) { cout << array[x] << endl; } return 0; }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>配列のサイズ変更
動的配列の長さは割り当て時に設定されます。
ただし、C++ には、割り当てられた配列のサイズを変更する組み込みのメカニズムがありません。
ただし、新しい配列を動的に割り当て、要素をコピーしてから古い配列を消去することで、この課題を克服できます。
注:この手法はエラーが発生しやすいため、回避するようにしてください。
配列の動的削除
動的配列は、その目的が達成されたら、コンピューターのメモリから削除する必要があります。これを行うには、delete ステートメントが役立ちます。解放されたメモリ空間は、別のデータセットを保持するために使用できます。ただし、動的配列をコンピューターのメモリから削除しなくても、プログラムが終了すると自動的に削除されます。
注:
コンピューターのメモリから動的配列を削除するには、delete ではなく、delete[] を使用する必要があります。 [] は、1 つの変数ではなく複数の変数を削除するように CPU に指示します。動的配列を扱うときに delete[] の代わりに delete を使用すると、問題が発生する可能性があります。このような問題の例には、メモリ リーク、データ破損、クラッシュなどがあります。
例 3:
#include<iostream> using namespace std; int main() { int x, n; cout << "How many numbers will you type?" << "\n"; cin >>n; int *arr = new int(n); cout << "Enter " << n << " numbers" << endl; for (x = 0; x < n; x++) { cin >> arr[x]; } cout << "You typed: "; for (x = 0; x < n; x++) { cout << arr[x] << " "; } cout << endl; delete [] arr; return 0; }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>まとめ:
- 通常の配列のサイズは固定です。一度宣言したサイズは変更できません。
- これらのタイプの配列では、メモリ サイズはコンパイル時に決定されます。
- 動的配列は異なります。サイズは実行時に変更できます。
- 動的配列では、サイズは実行時に決定されます。
- C++ の動的配列は new キーワードを使用して宣言されます。
- 角括弧を使用して、動的配列に格納するアイテムの数を指定します。
- 配列の処理が完了したら、delete 演算子を使用してメモリを解放できます。
- delete 演算子を [] と共に使用して、すべての配列要素のメモリを解放します。
- [] を指定しない削除では、1 つの要素のみのメモリが解放されます。
- C++ 配列のサイズを変更する組み込みのメカニズムはありません。
- リスト初期化子を使用して配列を初期化する場合、「=」演算子は使用しません。
C言語