C 11 の範囲ベースを使用する正しい方法は何ですか?
C 11 では、範囲を使用してコンテナーを反復処理する新しい方法が導入されました。 -based for。従来の for ループよりも簡潔で読みやすいです。ただし、これを正しく使用するには、従うべきルールがいくつかあります。
範囲ベースの for を使用する場合は、反復処理する変数の型を指定し、その後にコロン (:) を入力します。反復処理するコンテナ。例:
for (int i : {1, 2, 3}) { // Do something with i } // Iterate over a vector of strings for (string s : my_vector) { // Do something with s }
for ステートメントで指定した変数には、コンテナーを反復処理するときに、コンテナー内の各要素の値が自動的に割り当てられます。これにより、データのコレクションを反復処理するのが非常に便利になります。
どの構文を使用する必要がありますか? for (auto elem : コンテナ)、for (auto& elem : コンテナ)、または for (const auto& elem : コンテナ)?
使用する必要がある構文は、要素を変更するかどうかによって異なります。コレクションかどうか。要素を変更したい場合は、 for (auto& elem :container) を使用する必要があります。要素を変更したくない場合は、for (auto elem :container) または for (const auto& elem :container) を使用できます。
for ステートメントで auto を使用すると、コンパイラが自動的に変数の型を推測します。これは便利ですが、コンパイラーが型を正しく推定できない場合、エラーが発生することがあります。変数の型が不明な場合は、明示的に指定する方が安全です。
for ステートメントで const を使用すると、ループ内で変数を変更できないことになります。これは、コレクション内の要素が誤って変更されないようにしたい場合に便利です。
例:
// Modify the elements in a vector vector<int> my_vector = {1, 2, 3, 4, 5}; for (auto& elem : my_vector) { elem *= 2; } // Do something with the modified vector for (auto elem : my_vector) { cout << elem << endl; } // Iterate over a vector of const strings const vector<string> my_const_vector = {"Hello", "World", "!"}; for (const auto& elem : my_const_vector) { // Do something with elem cout << elem << endl; }
最初の例では、 2 番目の例では、文字列の const ベクトルを反復処理し、各要素を出力します。 const ベクトル内の要素は変更できないことに注意してください。
結論:
範囲ベースの for は、コードをより簡潔にして簡単にできる強力なツールです。読む。上記のルールに従うことで、範囲ベースの for を正しく使用して、データのコレクションを反復処理できます。
以上がC 11 の範囲ベースの For ループの正しい構文を選択するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。