工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

例による配列の 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;
    }
    


    出力:

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

    コードの説明:

    <オール>
  • iostream ヘッダー ファイルをプログラムにインクルードして、その関数を使用します。
  • クラスを呼び出さずに使用できるように、std 名前空間をプログラムに含めます。
  • main() 関数を呼び出します。プログラム ロジックは、関数の本体内に追加する必要があります。
  • 2 つの整数変数 x と n を宣言します。
  • ユーザーに変数 n の値を入力するよう促すテキストをコンソールに出力します。
  • キーボードからユーザー入力を読み取り、変数 n に割り当てます。
  • 合計 n 個の整数を保持する配列を宣言し、それをポインター変数 *arr に割り当てます。
  • ユーザーに n 個の項目を入力するよう促すメッセージを出力します。
  • for ループを使用してループ変数 x を作成し、ユーザーが入力した項目を反復処理します。
  • ユーザーが入力した要素を読み取り、配列 arr に格納します。
  • for ループの本体の終了
  • コンソールにテキストを出力します。
  • for ループを使用してループ変数 x を作成し、配列の項目を反復処理します。
  • arr という名前の配列に含まれる値をコンソールに出力します。
  • for ループの本体の終了
  • プログラムは、正常終了時に値を返さなければなりません。
  • 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;
    }
    

    出力:

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

    コードの説明:

    <オール>
  • iostream ヘッダー ファイルをプログラムにインクルードして、その関数を使用します。
  • プログラムに std 名前空間を含めて、呼び出さずにそのクラスを使用します。
  • main() 関数を呼び出します。プログラム ロジックは、関数の本体内に追加する必要があります。
  • x という整数変数を宣言します。
  • イニシャライザ リストを使用して、array という名前の動的配列を宣言します。配列は 5 つの整数要素を保持します。配列の長さと初期化子リストの間に「=」演算子を使用していないことに注意してください。
  • コンソールにテキストを出力します。 endl は、行末を意味する C++ キーワードです。カーソルを次の文に移動します。
  • for ループを使用して配列要素を反復処理します。
  • array という名前の配列の内容をコンソールに出力します。
  • for ループの本体の終了
  • プログラムは、正常終了時に値を返さなければなりません。
  • main() 関数の本体の終わり。
  • 配列のサイズ変更

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

    ただし、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;
    }
    

    出力:

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

    コードの説明:

    <オール>
  • 関数を使用するために、プログラムに iostream ヘッダー ファイルを含めます。
  • クラスを呼び出さずに使用できるように、std 名前空間をプログラムに含めます。
  • main() 関数を呼び出します。プログラム ロジックは、関数の本体内に追加する必要があります。
  • 整数データ型の 2 つの変数 x と n を宣言します。
  • コンソールにテキストを出力します。テキストは、ユーザーが入力する数字の数を述べるよう求めます。
  • キーボードからユーザー入力を読み取ります。入力値は変数 n に割り当てられます。
  • ポインタ変数 *arr を宣言します。配列 arr は、合計 n 個の整数を格納するためのメモリを確保します。
  • n 個の数字を入力するようユーザーに促すメッセージをコンソールに出力します。
  • for ループとループ変数 x を作成して、ユーザーが入力した数値を反復処理します。
  • ユーザーが入力した数値を読み取り、配列 arr に格納します。
  • for ループの本体の終了
  • コンソールにテキストを出力します。
  • for ループとループ変数 x を使用して、配列 arr の内容を反復処理します。
  • 配列 arr の値をコンソールに出力します。
  • for ループの本体の終了
  • コンソールに空行を出力する
  • 配列 arr のメモリを解放します。
  • プログラムが正常に完了すると、値が返されます。
  • main() 関数の本体の終わり。
  • まとめ:


    C言語

    1. C# 配列
    2. C++ プログラミングで配列を関数に渡す
    3. C 動的メモリ割り当て
    4. C++ の配列 |宣言する |初期化 |配列へのポインタの例
    5. C++ の演算子と例:型とプログラムとは
    6. C++ Switch Case ステートメントと EXAMPLE
    7. C++ 構造体と例
    8. 印刷例を使用した C++ 標準テンプレート ライブラリ (STL) のマップ
    9. C++ の std::list と例
    10. 構造体とクラスの違い:C++ の例で説明
    11. 例を使用したJavaプログラムでの選択ソート