C 11 の範囲ベースの for ループ
構文と使用法
C 11 では、簡潔かつ表現力豊かな方法として範囲ベースの for ループが導入されました。コンテナを反復処理します。構文は次のとおりです。
for (range_declaration : container) {
// body of the loop
}
- range_declaration は、コンテナの各要素を保持する変数を宣言します。
- コンテナは、反復するコンテナです。
参照によるキャプチャまたはValue
range_declaration 内の変数は、次の構文を使用して参照または値によって取得できます。
- auto は値によって要素を取得します。
- auto& は要素を取得します非 const 参照による。
- const auto& 要素を const でキャプチャします。参照。
要素を変更する必要がない観察には、 const auto& を使用する必要があります。これにより、不要なコピーが防止され、元の要素が変更されないことが保証されます。
要素を変更したい場合は、auto& を使用してください。
プロキシ反復子 (std::vector など) をキャプチャするには auto&& を使用する必要があります。
範囲ベースの For を使用するためのガイドライン
範囲ベースの For を使用する場合は、次のガイドラインを考慮してください。
- 要素を観察する場合:
for (const auto& elem : コンテナ) (const によるキャプチャ)参照)- 要素のコピーが安価な場合 (int など)、for (auto elem :container) (値によるキャプチャ) を使用できます。
-
- 要素を変更する場合:
for (auto& elem :container) (キャプチャ)非 const 参照による)- プロキシ反復子 (std::vector など) の場合、for (auto&& elem :container) を使用します (&& によってキャプチャ)。
-
汎用コード考慮事項
反復される要素の型がわからない汎用コードでは、要素を観察するために
for (const auto& elem :container) を使用します。- for (auto&& elem :container) 要素を変更するため (通常とプロキシの両方で機能します)イテレータ).
-
以上がC 11 で範囲ベースの For ループを効果的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。