Range-for-Loops 和std::vector
在標準庫容器中使用基於範圍的for 循環時,迭代器的資料類型通常決定計數器變數的資料類型。然而,在 std::vector
在第一個範例中:
<code class="cpp">std::vector<int> intVector(10); for (auto& i : intVector) std::cout << i;
std::vector< ;int>包含整數,因此迭代器型別是 std::vector
現在,讓我們考慮第二個範例:
<code class="cpp">std::vector<bool> boolVector(10); for (auto& i : boolVector) std::cout << i;</code>
這裡是 std: :向量包含布林值,它們以整數壓縮格式儲存。迭代器類型是 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中文網其他相關文章!