C++ の配列の動的割り当てと例

動的配列とは何ですか?

動的配列は通常の配列と非常に似ていますが、そのサイズはプログラムの実行中に変更できます。 DynamArray 要素はメモリの連続ブロックを占有します。

配列が作成されると、そのサイズは変更できません。 ただし、動的配列は異なります。 動的配列は、いっぱいになった後でもサイズを拡張できます。

配列の作成中に、所定の量のメモリが割り当てられます。 動的配列の場合は、必要に応じてメモリ サイズが特定の係数で増加するため、これは当てはまりません。

動的配列のパフォーマンスに影響を与える要因

アレイの初期サイズとその成長率によってパフォーマンスが決まります。 以下に注意してくださいwing ポイント:

  1. 配列のサイズと成長率が小さい場合、メモリの再割り当てがより頻繁に行われます。 これにより、アレイのパフォーマンスが低下します。
  2. 配列のサイズが大きく、成長率が大きい場合、未使用のメモリが大量に存在することになります。 このため、サイズ変更操作には時間がかかる場合があります。 これにより、アレイのパフォーマンスが低下します。

新しいキーワード

C++ では、new キーワードを使用して動的配列を作成できます。割り当てるアイテムの数を四角形のペア内で指定します brackets。型名はこれの前に置く必要があります。ご希望の数のアイテムを割り当てます。

構文

新しいキーワードは次のようになりますwing 構文:

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;
}

出力:

新しいキーワード

コードのスクリーンショットは次のとおりです。

新しいキーワード

コードの説明:

  1. iostream ヘッダー ファイルをプログラムにインクルードして、そのヘッダー ファイルを使用します。 機能.
  2. std 名前空間を呼び出さずにそのクラスを使用するには、プログラムに std 名前空間を含めます。
  3. main() 関数を呼び出します。 プログラム ロジックは関数の本体内に追加する必要があります。
  4. XNUMX つの整数変数 x と n を宣言します。
  5. ユーザーに変数 n の値の入力を求めるテキストをコンソールに出力します。
  6. キーボードからユーザー入力を読み取り、それを変数 n に割り当てます。
  7. 合計 n 個の整数を保持する配列を宣言し、それをポインター変数 *arr に代入します。
  8. ユーザーに n 個の項目の入力を求めるメッセージを出力します。
  9. for ループを使用してループ変数 x を作成し、ユーザーが入力した項目を反復処理します。
  10. ユーザーが入力した要素を読み取り、配列 arr に格納します。
  11. 本体の端 forループ.
  12. コンソールにテキストを出力します。
  13. for ループを使用してループ変数 x を作成し、配列の項目を反復処理します。
  14. arr という名前の配列に含まれる値をコンソールに出力します。
  15. for ループの本体の終わり。
  16. プログラムは正常に完了すると値を返す必要があります。
  17. main() 関数の本体の終わり。

注: 上記の例では、ユーザーは実行時に配列の任意のサイズを指定できます。 これは、配列のサイズが実行時に決定されることを意味します.

動的に割り当てられた配列の初期化

動的配列を 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;
}

出力:

動的に割り当てられた配列の初期化

コードのスクリーンショットは次のとおりです。

動的に割り当てられた配列の初期化

コードの説明:

  1. その機能を使用するには、iostream ヘッダー ファイルをプログラムに組み込みます。
  2. プログラムに std 名前空間を含めると、そのクラスを呼び出さずに使用できます。
  3. main() 関数を呼び出します。 プログラム ロジックは関数の本体内に追加する必要があります。
  4. x という名前の整数変数を宣言します。
  5. 初期化子リストを使用して、array という名前の動的配列を宣言します。 配列には 5 つの整数要素が保持されます。 配列の長さと初期化子リストの間で「=」演算子を使用していないことに注意してください。
  6. コンソールにテキストを出力します。 endl は、終了行を意味する C++ キーワードです。 カーソルを次の文に移動します。
  7. for ループを使用して配列要素を反復処理します。
  8. array という名前の配列の内容をコンソールに出力します。
  9. for ループの本体の終わり。
  10. プログラムは正常に完了すると値を返す必要があります。
  11. main() 関数の本体の終わり。

配列のサイズ変更

動的配列の長さは、割り当て時に設定されます。

ただし、C++ には、配列の割り当て後にサイズを変更するメカニズムが組み込まれていません。

ただし、新しい配列を動的に割り当て、要素をコピーして古い配列を消去することで、この課題を克服できます。

注: この手法はエラーが発生しやすいため、回避するようにしてください。

配列の動的削除

動的配列は、その目的が達成されたら、コンピュータのメモリから削除する必要があります。 delete ステートメントはこれを実現するのに役立ちます。 解放されたメモリ空間は、別のデータセットを保持するために使用できます。 ただし、動的配列をコンピュータのメモリから削除しなくても、プログラムが終了すると自動的に削除されます。

注:

コンピュータのメモリから動的配列を削除するには、delete の代わりに delete[] を使用する必要があります。 [] は、XNUMX つの変数ではなく複数の変数を削除するように 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;
}

出力:

配列の動的削除

コードのスクリーンショットは次のとおりです。

配列の動的削除

コードの説明:

  1. iostream ヘッダー ファイルの機能を使用するには、プログラムに iostream ヘッダー ファイルをインクルードします。
  2. std 名前空間を呼び出さずにそのクラスを使用するには、プログラムに std 名前空間を含めます。
  3. main() 関数を呼び出します。 プログラム ロジックは関数の本体内に追加する必要があります。
  4. 整数データ型の XNUMX つの変数 x と n を宣言します。
  5. コンソールにテキストを出力します。 テキストでは、入力する数字の数をユーザーに尋ねます。
  6. キーボードからのユーザー入力を読み取ります。 入力値は変数 n に代入されます。
  7. ポインタ変数 *arr を宣言します。 配列 arr は、合計 n 個の整数を格納するためにメモリを予約します。
  8. ユーザーに n 個の数値を入力するよう求めるメッセージをコンソールに出力します。
  9. for ループとループ変数 x を作成して、ユーザーが入力した数値を反復処理します。
  10. ユーザーが入力した数値を読み取り、配列 arr に保存します。
  11. for ループの本体の終わり。
  12. コンソールにテキストを出力します。
  13. for ループとループ変数 x を使用して、配列 arr の内容を反復処理します。
  14. 配列 arr の値をコンソールに出力します。
  15. for ループの本体の終わり。
  16. コンソールに空の行を出力します。
  17. 配列 arr のメモリを解放します。
  18. プログラムは正常に完了すると値を返します。
  19. main() 関数の本体の終わり。

まとめ

  • 通常の配列のサイズは固定です。 一度宣言したサイズは変更できません。
  • これらのタイプの配列では、メモリ サイズはコンパイル時に決定されます。
  • 動的配列は異なります。 サイズは実行時に変更できます。
  • 動的配列では、サイズは実行時に決定されます。
  • C++ の動的配列は、 new キーワードを使用して宣言されます。
  • うちは正方形を使ってます brackets 動的配列に格納する項目の数を指定します。
  • 配列の処理が完了したら、delete 演算子を使用してメモリを解放できます。
  • [] を伴う削除演算子を使用して、すべての配列要素のメモリを解放します。
  • [] を指定せずに削除すると、単一要素のメモリのみが解放されます。
  • C++ 配列のサイズを変更する組み込みメカニズムはありません。
  • リスト初期化子を使用して配列を初期化する場合、「=」演算子は使用しません。