logo

C++ 配列

C++ では、配列は、類似したデータ型の複数の値を連続したメモリ位置に格納するために使用されるデータ構造です。

例えば 4 人または 5 人の生徒の成績を保存する必要がある場合は、5 つの異なる変数を作成することで簡単に保存できますが、100 人の生徒または 500 人の生徒の成績を保存したい場合は、その数の変数を作成するのが非常に困難になります。そしてそれらを管理します。ここで、必要なサイズの配列を作成するだけで簡単にそれを実行できる配列が登場します。



C++ の配列

C++ における配列のプロパティ

  • 配列は、連続したメモリ位置に格納される、同じデータ型のデータのコレクションです。
  • 配列のインデックス付けは次から始まります 0. これは、最初の要素が 0 番目のインデックスに格納され、2 番目の要素が 1 番目に格納されることを意味します。
  • 配列の要素には、インデックスを使用してアクセスできます。
  • 配列が宣言されると、そのサイズはプログラム全体を通じて一定のままになります。
  • 配列には複数の次元を含めることができます。
  • 配列のバイト単位のサイズは、sizeof 演算子によって決定できます。これを使用すると、配列内の要素の数もわかります。
  • 隣接するアドレスを減算することで、配列に格納されている要素のタイプのサイズを見つけることができます。

C++ での配列宣言

C++ では、最初にデータ型を指定し、次に配列の名前とそのサイズを指定するだけで配列を宣言できます。

data_type array_name[Size_of_array];>



int arr[5];>

ここ、

  • 整数: 配列に格納されるデータのタイプです。 char、float、double などの他のデータ型も使用できます。
  • 到着: 配列の名前です。
  • 5: これは配列のサイズであり、配列に格納できる要素は 5 つだけであることを意味します。

C++での配列宣言

C++ での配列の初期化

C++ では、さまざまな方法で配列を初期化できますが、配列を初期化する最も一般的な方法をいくつか説明します。宣言時または宣言後に配列を初期化できます。



1. C++ の値を使用して配列を初期化する

配列を値で初期化しました。中括弧「{}」で囲まれた値が配列に割り当てられます。ここでは、arr[0] には 1、arr[1] には 2 が格納されます。ここでは配列のサイズは 5 です。

int arr[5] = {1, 2, 3, 4, 5};>

2. C++ でサイズを指定せずに値を指定して配列を初期化する

配列を値で初期化しましたが、配列の長さを宣言していないため、配列の長さは中括弧内の要素の数と等しくなります。

アンドロイドのバージョン
int arr[] = {1, 2, 3, 4, 5};>

3. 宣言後の配列の初期化 (ループを使用)

配列を宣言した後、ループを使用して配列を初期化しました。このメソッドは通常、ユーザーから入力を受け取りたい場合、または配列の各インデックスに要素を 1 つずつ割り当てることができない場合に使用されます。要件に応じてループ条件を変更したり、初期化値を変更したりできます。

for (int i = 0; i   arr[i] = value; }>

4. C++ で配列を部分的に初期化する

ここでは、サイズ「5」、値「1」と「2」のみを持つ配列「partialArray」を宣言しました。したがって、これらの値は最初の 2 つのインデックスに格納され、残りのインデックスには「0」が格納されます。

int partialArray[5] = {1, 2};>

5. C++ で配列をゼロで初期化する

中括弧内に「0」を指定することで、すべての要素を「0」として配列を初期化できます。これは、このメソッドを使用して配列を別の値 (たとえば「2」) で初期化しようとした場合にのみ発生します。その場合、「2」は 0 番目のインデックスにのみ格納されます。

int zero_array[5] = {0};>

C++ での配列の要素へのアクセス

配列の要素にアクセスするには、配列の名前を指定し、次に配列添字演算子 [] で囲まれた要素のインデックスを指定します。たとえば、arr[i]。

例 1: 配列要素にアクセスする方法を示す C++ プログラム

C++
// C++ Program to Illustrate How to Access Array Elements #include  using namespace std; int main() {  int arr[3];  // Inserting elements in an array  arr[0] = 10;  arr[1] = 20;  arr[2] = 30;  // Accessing and printing elements of the array  cout << 'arr[0]: ' << arr[0] << endl;  cout << 'arr[1]: ' << arr[1] << endl;  cout << 'arr[2]: ' << arr[2] << endl;  return 0; }>

出力
arr[0]: 10 arr[1]: 20 arr[2]: 30>

配列要素の更新

配列内の要素を更新するには、更新するインデックスを配列添字演算子で囲んで使用し、新しい値を割り当てます。

arr[i] = new_value;>

C++ で配列を走査する

ループを使用して配列を横断できます。 C++ のインデックス作成を使用します。まず、配列「table_of_two」を 2 の倍数で初期化しました。その後、配列のインデックス付けは 0 から始まるため、0 から 9 までの for ループを実行します。したがって、インデックスを使用して、配列に格納されているすべての値を出力します。

例 2: 配列を走査する方法を示す C++ プログラム

C++
// C++ Program to Illustrate How to Traverse an Array #include  using namespace std; int main() {  // Initialize the array  int table_of_two[10]  = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };  // Traverse the array using for loop  for (int i = 0; i < 10; i++) {  // Print the array elements using indexing  cout << table_of_two[i] << ' ';  }  return 0; }>

出力
2 4 6 8 10 12 14 16 18 20>

C++ の配列のサイズ

C++ には、Java のような配列サイズを見つけるための length 関数はありませんが、 sizeof() 演算子を使用して配列のサイズを計算できます 騙す。まず、メモリ内の配列全体が占めるサイズを求め、それを配列に格納されている要素の種類のサイズで割ります。これにより、配列に格納されている要素の数がわかります。

data_type size = sizeof(Array_name) / sizeof(Array_name[index]);>

例 3: 配列のサイズを求める方法を示す C++ プログラム

C++
// C++ Program to Illustrate How to Find the Size of an // Array #include  using namespace std; int main() {  int arr[] = { 1, 2, 3, 4, 5 };  // Size of one element of an array  cout << 'Size of arr[0]: ' << sizeof(arr[0]) << endl;  // Size of array 'arr'  cout << 'Size of arr: ' << sizeof(arr) << endl;  // Length of an array  int n = sizeof(arr) / sizeof(arr[0]);  cout << 'Length of an array: ' << n << endl;  return 0; }>

出力
Size of arr[0]: 4 Size of arr: 20 Length of an array: 5>

C++ における配列とポインタの関係

C++ では、配列とポインターは互いに密接に関係しています。配列名は、配列の最初の要素のメモリ アドレスを格納したポインタとして扱われます。前に説明したように、配列要素は連続したメモリ位置に格納されるため、配列名を使用して配列のすべての要素にアクセスできます。

例 4: 配列とポインターの関係を示す

C++
// C++ Program to Illustrate that Array Name is a Pointer // that Points to First Element of the Array #include  using namespace std; int main() {  // Defining an array  int arr[] = { 1, 2, 3, 4 };  // Define a pointer  int* ptr = arr;  // Printing address of the arrary using array name  cout << 'Memory address of arr: ' << &arr << endl;  // Printing address of the array using ptr  cout << 'Memory address of arr: ' << ptr << endl;  return 0; }>

出力
Memory address of arr: 0x7fff2f2cabb0 Memory address of arr: 0x7fff2f2cabb0>

説明:

上記のコードでは、まず配列を定義します。 到着しました そしてポインタを宣言します ptr そして配列 arr をそれに割り当てます。 arr はポインタでもあるため、arr を ptr に割り当てることができます。その後、メモリアドレスを出力します。 到着しました 参照演算子 ( & )、ポインタに格納されているアドレスも出力します ptr そして、arr と ptr がわかります。どちらも同じメモリ アドレスを格納しています。

例 5: C++ でインデックスを作成せずに配列要素を出力する

通常、インデックスを使用して配列要素にアクセスし、出力します。たとえば、最初の要素にアクセスするために使用します 配列名[0]。 配列名は最初の要素のアドレスを格納したポインタであり、配列要素は連続した位置に格納されることを上で説明しました。ここで、配列名のみを使用して配列の要素にアクセスします。

C++
// C++ Program to Print Array Elements without Indexing #include  using namespace std; int main() {  // Define an array  int arr[] = { 11, 22, 33, 44 };  // Print elements of an array  cout << 'first element: ' << *arr << endl;  cout << 'Second element: ' << *(arr + 1) << endl;  cout << 'Third element: ' << *(arr + 2) << endl;  cout << 'fourth element: ' << *(arr + 3) << endl;  return 0; }>

出力
first element: 11 Second element: 22 Third element: 33 fourth element: 44>

説明

上記のコードでは、最初に配列を宣言しました 到着しました 4つの要素で。その後、配列要素を出力します。それをどのように行うかについて話し合いましょう。配列名は配列の最初の要素のアドレスを格納するポインタであると説明しました。そのため、最初の要素を出力するには、そのポインタを逆参照しました。 (*編) 逆参照演算子の使用 (*) そのアドレスに保存されているデータを印刷します。

配列の 2 番目の要素を出力するには、まず次の要素を追加します。 1 到着しました これは、最初の要素の直後のアドレスへのポインタを取得する (arr のアドレス + size_of_one_element *1) と同等であり、その後、そのポインタを逆参照して 2 番目の要素を出力します。同様に、インデックスを使用せずに配列の残りの要素を出力します。

C++ で配列を関数に渡す

配列を効率的に使用するには、関数に配列を渡す方法を知る必要があります。関数に変数を渡すのと同じように、配列を引数として関数に渡すことができますが、この概念を使用すると、配列名がポインタとして扱われることがわかります。配列を引数として関数に渡し、次を使用してその配列のすべての要素にアクセスできます。ポインタ。

したがって、最終的には、 配列は常に関数へのポインターとして渡されます。 主に使用される関数に配列を渡す3つの方法を見てみましょう。

1. 配列をポインタとして渡す

このメソッドでは、関数呼び出しで配列名を渡すだけです。これは、配列の最初の要素にアドレスを渡すことを意味します。このメソッドでは、関数内で配列要素を変更できます。

構文

return_type   function_name   (   data_type *array_name   ) {     // set of statements  }>

2. 配列をサイズなしの配列として渡す

このメソッドでは、関数は引数としてサイズを持たない単純な配列宣言を使用して配列を受け入れます。

構文

return_type   function_name    ( data_type array_name[]   ) {    // set of statements  }>

3. 配列をサイズ付き配列として渡す

このメソッドでは、関数は、引数としてサイズを指定した単純な配列宣言を使用して配列を受け入れます。この方法では、配列のサイズを示すために配列のサイズを変更します。

構文

return_type function_name(data_type array_name[size_of_array]){  // set of statements }>

注記: どのメソッドを使用しても、配列は渡された関数内のポインターとして扱われます。配列がポインターとして渡されると、そのサイズに関する情報が失われ、次のような現象が発生します。 アレイの崩壊。

例: 配列を関数に渡すさまざまな方法の説明

C++
#include  using namespace std; // passing array as a sized array argument void printArraySized(int arr[3], int n) {  cout << 'Array as Sized Array Argument: ';  for (int i = 0; i < n; i++) {  cout << arr[i] << ' ';  }  cout << endl; } // passing array as an unsized array argument void printArrayUnsized(int arr[], int n) {  cout << 'Array as Unsized Array Argument: ';  for (int i = 0; i < n; i++) {  cout << *(arr + i) << ' ';  }  cout << endl; } // Passing array as a pointer argument void printArrayPointer(int* ptr, int n) {  // Print array elements using pointer ptr  // that store the address of array passed  cout << 'Array as Pointer Argument: ';  for (int i = 0; i < n; i++) {  cout << ptr[i] << ' ';  } } // driver code int main() {  int arr[] = { 10, 20, 30 };  // Call function printArray and pass  // array and its size to it.  printArraySized(arr, 3);  printArrayUnsized(arr, 3);  printArrayPointer(arr, 3);  return 0; }>

出力
Array as Sized Array Argument: 10 20 30 Array as Unsized Array Argument: 10 20 30 Array as Pointer Argument: 10 20 30>

C++ の多次元配列

複数の次元で宣言された配列は、多次元配列と呼ばれます。最も広く使用されている多次元配列は、2D 配列と 3D 配列です。これらの配列は通常、行と列の形式で表されます。

多次元配列の宣言

Data_Type Array_Name[Size1][Size2]...[SizeN];>

どこ、

  • データ・タイプ: 配列に格納されるデータのタイプ。
  • 配列名: アレイの名前。
  • サイズ1、サイズ2、…、サイズN: 各寸法のサイズ。

C++ の 2 次元配列

C++ では、2 次元配列は行と列に配置された要素のグループです。各要素には 2 つのインデックス (行用と列用) を使用してアクセスします。これにより、テーブルまたはグリッドとして簡単に視覚化できます。

2D配列の構文

data_Type array_name[n][m];>

どこ、

  • n: 行の数。
  • メートル: 列の数。
    C++の二次元配列

例: 2 次元配列を示す C++ プログラム

C++
// c++ program to illustrate the two dimensional array #include  using namespace std; int main() {  // Declaring 2D array  int arr[4][4];  // Initialize 2D array using loop  for (int i = 0; i < 4; i++) {  for (int j = 0; j < 4; j++) {  arr[i][j] = i + j;  }  }  // Printing the element of 2D array  for (int i = 0; i < 4; i++) {  for (int j = 0; j < 4; j++) {  cout << arr[i][j] << ' ';  }  cout << endl;  }  return 0; }>

出力
0 1 2 3 1 2 3 4 2 3 4 5 3 4 5 6>

説明

上記のコードでは、4 行 4 列の 2D 配列を宣言し、その後、ループの反復ごとに (i+j) の値で配列を初期化しました。次に、ネストされたループを使用して 2D 配列を出力します。以下の出力では、4 行 4 列があることがわかります。

C++ の 3 次元配列

3D 配列は 3 次元を使用します。さまざまな 2 次元配列を積み上げたコレクションを使用して表現できます。行インデックス、列インデックス、深さインデックスの 3 つのインデックスは、3D 配列内の各要素を一意に識別するために使用されます。

C++での三次元配列の宣言

C++ で 3D 配列を宣言するには、2D 次元とともに 3 次元を指定する必要があります。

Data_Type Array_Name[D][R][C];>

どこ、

  • データ・タイプ: 各要素に格納されるデータのタイプ。
  • 配列名: アレイの名前
  • D: 2D 配列の数または配列の深さ。
  • R: 各 2D 配列の行数。
  • 子: 各 2D 配列の列の数。

int array[3][3][3];>

C++の三次元配列

例: 3D 配列を示す C++ プログラム

C++
// C++ program to illustrate the 3d array #include  using namespace std; int main() {  // declaring 3d array  int arr[3][3][3];  // initializing the array  for (int i = 0; i < 3; i++) {  for (int j = 0; j < 3; j++) {  for (int k = 0; k < 3; k++) {  arr[i][j][k] = i + j + k;  }  }  }  // printing the array  for (int i = 0; i < 3; i++) {  cout << i << 'st layer:' << endl;  for (int j = 0; j < 3; j++) {  for (int k = 0; k < 3; k++) {  cout << arr[i][j][k] << ' ';  }  cout << endl;  }  cout << endl;  }  return 0; }>

出力
0st layer: 0 1 2 1 2 3 2 3 4 1st layer: 1 2 3 2 3 4 3 4 5 2st layer: 2 3 4 3 4 5 4 5 6>

説明

上記のコードでは、3D 配列を宣言し、3 つのネストされた for ループを使用して初期化しています。その後、出力に見られるように、3 つのネストされた for ループを使用して、3D 配列のすべてのレイヤーを再度印刷しました。

関連記事

  • C++ の多次元配列
  • 配列のプロパティ
  • アレイの減衰