標準マップの範囲ベースの反復
C 11 以降では、範囲ベースの for() ループにより反復に便利な構文が提供されます。コンテナを通して。ただし、マップのような複雑なデータ構造での動作は混乱を招く可能性があります。
次の例を考えてみましょう:
<code class="cpp">std::map<foo, bar> testing = /*...initialized...*/; for (auto abc : testing) { std::cout << abc << std::endl; }</code>
このループ内の abc の型は何ですか? foo キー、bar 値、または反復子を生成しますか?
解決策
C 11 および C 14 では、範囲ベースのループがマップのキーを反復処理します。 -値のペア。したがって、abc のタイプは std::pair
キーと値を個別に取得するには、ペアの最初と 2 番目のメンバーを使用できます。
<code class="cpp">for (auto abc : testing) { std::cout << abc.first << " has value " << abc.second << std::endl; }</code>
ループ内の変数は通常、マップの内容を変更しないことを示すために const として宣言されることに注意してください。
C 17 以降
In C 17 では、マップの範囲ベースの反復に便利な省略記法が導入されています。
<code class="cpp">for (const auto& [key, value] : testing) { std::cout << key << " has value " << value << std::endl; }</code>
この構文は、最初と 2 番目のメンバーをキーと値で直接置き換えます。これにより、キーと値のペアに対する繰り返しのより明確で簡潔な表現が可能になります。
追加の考慮事項
<code class="cpp">for (auto& kv : testing) { std::cout << kv.first << " had value " << kv.second << std::endl; kv.second = "modified"; // Modifies the map's value }</code>
以上が範囲ベースの反復は C の標準マップでどのように機能しますか?また、バージョン間で構文はどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。