C++11 で導入された for-each ループ (範囲ベース for ループ) は、コンテナ (配列や vector など) の要素を順に処理するための簡潔で便利な構文です。従来の for ループに比べて、コードの可読性が向上し、インデックスの管理が不要になるため、エラーの可能性を減らすことができます。
基本的な構文
C++
for (要素の型 変数名 : コンテナ) {
// ループ処理
}
- 要素の型: コンテナ内の要素のデータ型を指定します。
- 変数名: 各要素にアクセスするための変数の名前を指定します。
- コンテナ: 要素を反復処理する対象のコンテナ (配列や vector など) を指定します。
具体的な使用例
C++
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// for-each ループを使って各要素を出力
for (int number : numbers) {
std::cout << number << " ";
}
std::cout << std::endl; // 1 2 3 4 5
// 要素の値を変更する場合 (参照渡し)
for (int& number : numbers) {
number *= 2;
}
// 再度 for-each ループで出力
for (int number : numbers) {
std::cout << number << " ";
}
std::cout << std::endl; // 2 4 6 8 10
return 0;
}
解説
-
最初の for-each ループ:
numbers
ベクターの各要素が、number
変数に順番にコピーされます。- ループ内で
number
を出力することで、各要素の値が表示されます。
-
2番目の for-each ループ (参照渡し):
int& number
のように、参照 (&
) を使うことで、要素のコピーではなく、元の要素への参照がnumber
に渡されます。- ループ内で
number *= 2
とすることで、元のベクターの要素の値が変更されます。
-
3番目の for-each ループ:
- 変更された
numbers
ベクターの要素が再度出力されます。
- 変更された
for-each ループのメリット
- コードの簡潔性: 従来の for ループに比べて、インデックスの管理が不要なため、コードが短く、可読性が向上します。
- エラーの削減: インデックスの範囲外アクセスなどのエラーを減らすことができます。
- 高速な処理: コンパイラによっては、for-each ループの方が従来の for ループよりも高速に処理できる場合があります。
注意点
- 要素の変更: for-each ループ内で要素の値を変更する場合は、参照渡し (
&
) を使う必要があります。 - コンテナの種類: for-each ループは、配列や vector などのコンテナで使用できます。
- C++11 以降: for-each ループは C++11 で導入された機能です。古いコンパイラでは使用できない場合があります。
まとめ
for-each ループは、C++ でコンテナの要素を効率的に処理するための強力なツールです。積極的に活用することで、コードの品質を向上させることができます。
0 件のコメント:
コメントを投稿