logo

C++ の範囲ベースの for ループ

このトピックでは、C++ プログラミング言語の範囲ベースの for ループについて説明します。 C++ 言語では、C++11 以降のバージョンで範囲ベースの for ループという新しい概念が導入されました。これは、通常の For ループよりもはるかに優れています。範囲ベースの for ループでは、for ループの反復を実装するために大規模なコーディングは必要ありません。これは、コンテナの各要素をある範囲 (最初から最後まで) で反復するシーケンシャル反復子です。

C++ の範囲ベースの for ループ

構文

 for (range_declaration : range_expression ) loop statement 
    範囲宣言:これは、 range_expression またはその型への参照によって表される収集された要素の型と同じ型の変数を宣言するために使用されます。範囲式:これは、要素の適切なシーケンスを表す式を定義します。ループステートメント:これは、range-expression の終わりまで繰り返し実行される 1 つ以上のステートメントを含む範囲ベースの for ループの本体を定義します。

注: コンテナ要素のデータ型がわからない場合は、range_expression のデータ型を自動的に識別する auto キーワードを使用できます。

範囲ベースの for ループを使用して配列の各要素を出力するプログラム

C++ で範囲ベースの for ループを使用して int 配列と double 配列を出力する例を考えてみましょう。

Javaのキューと優先キュー

プログラム.cpp

 #include using namespace std; int main () { int arr1 [5] = { 10, 20, 30, 40, 50}; double darr [5] = { 2.4, 4.5, 1.5, 3.5, 4.0 }; // use range based for loop for ( const auto &var : arr1 ) { cout << var << ' ' ; } // use auto keyword to automatically specify the data type of darr container. for ( const auto &var : darr ) { cout << var << ' ' ; } return 0; } 

出力

 10 20 30 40 50 2.4 4.5 1.5 3.5 4.0 

for ループに基づいた範囲内のベクトルをデモンストレーションするプログラム

範囲ベースの for ループでベクトルを実装する簡単なプログラムを書いてみましょう。

プログラム2.cpp

 #include #include using namespace std; int main() { int x; // declare integer variable // declare vector variable vector vect = {5, 10 , 25, 20, 25}; // display vector elements for ( int x : vect) { cout << x << ' '; } return 0; } 

出力

 5 10 25 20 25 

C++ で Range ベースの for ループを使用して参照を使用して配列を出力するプログラム

C++ で範囲ベースの for ループを使用して配列要素を出力する例を考えてみましょう。

ぎこちないメッシュグリッド

プログラム3.cpp

 #include #include #include using namespace std; int main(){ array data = {1, 3, -2, 4, 6, 7, 9}; cout << ' Before updating the elements: ' << endl; for (int x : data){ cout << x << ' '; } // pass the references for (int &itemRef : data){ itemRef *= 3; } cout << endl << ' After modification of the elements: ' << endl; for (int x : data){ cout << x << ' '; } cout << endl; return 0; } 

出力

 Before updating the elements: 1 3 -2 4 6 7 9 After modification of the elements: 3 9 -6 12 18 21 27 

ネストされた範囲ベースの for ループ

ループが別のループの本体内で定義されている場合、そのループはネストされた for ループと呼ばれます。同様に、別の範囲ベースのループ内のループで範囲を定義する場合、その手法はネストされた範囲ベースの for ループとして知られています。

構文:

 for ( int x : range_expression) // outer loop { for ( int y : range_expression) // inner loop { // statement to be executed } // statement to be executed } 

上記の構文では、範囲ベースの for ループを別のループ内に定義します。ここでは、C++ で内側と外側の範囲ベースの for ループを呼び出します。

C++ でネストされた範囲ベースの for ループを出力するプログラム

C++ プログラミング言語の for ループに基づくネストされた範囲を示す例を考えてみましょう。

Range.cpp

 #include using namespace std; int main () { int arr1[4] = { 0, 1, 2, 3 }; int arr2[5] = { 1, 2, 3, 4, 5 }; // use nested range based for loop for ( int x : arr1 ) { // declare nested loop for ( int y : arr2 ) { cout << ' x = ' << x << ' and j = ' << y << endl; } } return 0; } 

出力

 x = 0 and j = 1 x = 0 and j = 2 x = 0 and j = 3 x = 0 and j = 4 x = 0 and j = 5 x = 1 and j = 1 x = 1 and j = 2 x = 1 and j = 3 x = 1 and j = 4 x = 1 and j = 5 x = 2 and j = 1 x = 2 and j = 2 x = 2 and j = 3 x = 2 and j = 4 x = 2 and j = 5 x = 3 and j = 1 x = 3 and j = 2 x = 3 and j = 3 x = 3 and j = 4 x = 3 and j = 5 

従来の for ループと範囲ベースの for ループの違いは何ですか?

従来の for ループ 指定された条件が true になるまで、コードのブロックを繰り返し実行するために使用されます。従来の for ループには、変数の初期化、条件の指定という 3 つのパラメーターがあり、最後のパラメーターは、条件が true のままの場合に 1 つずつ増加するカウンターです。

Javaスレッドの作成

構文:

 for ( variable_initialization; specify_condition; updated_counter) { // statement to be executed; } 

範囲ベースのループ

一方、C++ 11 以降のバージョンでは、新しい範囲ベースの for ループが利用可能になりました。これには、範囲宣言と range_expression という 2 つのパラメーターがあります。また、ある範囲にわたってコードのブロックを繰り返し実行するためにも使用されます。

構文

 for ( range_declaration : range_ expression ) { loop _statement; // statement to be executed; } 

range_declaration は、range_expression (コンテナ) に関連する変数の型を宣言するために使用されます。 range_expression: これは、同じタイプの要素を連続して保持するコンテナーのようなものです。 loop_statement は、for ループ内で実行されるステートメントを定義します。

範囲ベースの for ループの利点

  1. 使いやすく、構文もシンプルです。
  2. 範囲ベースの for ループでは、コンテナー内の要素の数を計算する必要はありません。
  3. コンテナの開始要素と終了要素を認識します。
  4. コンテナのサイズと要素は簡単に変更できます。
  5. 要素のコピーは作成されません。
  6. 従来の for ループよりもはるかに高速です。
  7. 通常、auto キーワードを使用してコンテナ要素のデータ型を認識します。

範囲ベースの for ループの欠点

  1. リストの一部を走査することはできません。
  2. 逆順での移動には使用できません
  3. ポインタでは使用できません。
  4. 現在の要素のインデックスを作成することはできません。