Heim > Artikel > Backend-Entwicklung > Warum verhalten sich bereichsbasierte For-Schleifen mit „std::vector“ anders?
Range-for-Loops und std::vector
Bei Verwendung bereichsbasierter for-Schleifen mit Standardbibliothekscontainern wird die Der Datentyp des Iterators bestimmt häufig den Datentyp der Zählervariablen. Im Fall von std::vector
Im ersten Beispiel:
<code class="cpp">std::vector<int> intVector(10); for (auto& i : intVector) std::cout << i;
Der std::vector< ;int> enthält Ganzzahlen, daher ist der Iteratortyp ein std::vector Betrachten wir nun das zweite Beispiel: Hier ist der std: :vector Die Lösung besteht darin, auto&& zu verwenden, das an eine L-Wert-Referenz bindet, wenn es sich um eine L-Wert-Referenz handelt, oder eine temporäre Kopie des R-Werts zu erstellen, wenn es sich um einen temporären Wert handelt: Mit dieser Änderung gibt der Code den Inhalt von boolVector wie erwartet aus. Das obige ist der detaillierte Inhalt vonWarum verhalten sich bereichsbasierte For-Schleifen mit „std::vector“ anders?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!<code class="cpp">std::vector<bool> boolVector(10);
for (auto& i : boolVector)
std::cout << i;</code>
<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>
<code class="cpp">for (auto&& i : boolVector)
std::cout << i;</code>