Range-for-Loops と std::vector
標準ライブラリ コンテナーで範囲ベースの for ループを使用する場合、多くの場合、イテレータのデータ型によってカウンタ変数のデータ型が決まります。ただし、std::vector
最初の例:
<code class="cpp">std::vector<int> intVector(10); for (auto& i : intVector) std::cout << i;</code>
The std::vector< ;int>には整数が含まれているため、反復子の型は std::vector
次に、2 番目の例を考えてみましょう。
<code class="cpp">std::vector<bool> boolVector(10); for (auto& i : boolVector) std::cout << i;</code>
ここで、std は次のとおりです。 :vector
<code class="text">invalid initialization of non-const reference of type ‘std::_Bit_reference&’ from an rvalue of type ‘std::_Bit_iterator::reference {aka std::_Bit_reference}’</code>
解決策は、左辺値参照の場合は左辺値参照にバインドする auto&& を使用することです。一時的な場合は右辺値の一時コピーを作成します。
<code class="cpp">for (auto&& i : boolVector) std::cout << i;</code>
この変更により、コードは期待どおり boolVector の内容を出力します。
以上が範囲ベースの For ループが「std::vector」で異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。