このトピックでは、C++ プログラミング言語の範囲ベースの for ループについて説明します。 C++ 言語では、C++11 以降のバージョンで範囲ベースの for ループという新しい概念が導入されました。これは、通常の For ループよりもはるかに優れています。範囲ベースの for ループでは、for ループの反復を実装するために大規模なコーディングは必要ありません。これは、コンテナの各要素をある範囲 (最初から最後まで) で反復するシーケンシャル反復子です。
構文
for (range_declaration : range_expression ) loop statement
注: コンテナ要素のデータ型がわからない場合は、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 ループの利点
- 使いやすく、構文もシンプルです。
- 範囲ベースの for ループでは、コンテナー内の要素の数を計算する必要はありません。
- コンテナの開始要素と終了要素を認識します。
- コンテナのサイズと要素は簡単に変更できます。
- 要素のコピーは作成されません。
- 従来の for ループよりもはるかに高速です。
- 通常、auto キーワードを使用してコンテナ要素のデータ型を認識します。
範囲ベースの for ループの欠点
- リストの一部を走査することはできません。
- 逆順での移動には使用できません
- ポインタでは使用できません。
- 現在の要素のインデックスを作成することはできません。