理解Range-for-Loops 和std::vector
在C 中,基於範圍的for 循環簡化了迭代容器。但是,當嘗試將這些循環與某些容器類型(例如 std::vector
請考慮以下程式碼片段:
此程式碼迭代 intVector 集合並列印每個元素。但是,將 intVector 替換為 std::vector
此修改後的程式碼會導致錯誤:
底層機制:
出現差異的原因是std ::向量操作方式與其他向量類型不同。在大多數 std::vector 變體中,迭代器指向元素類型的引用,允許透過 auto& 直接存取和修改。然而,對於 std::vector
std::vector
解決方案:
要解決此問題,請在範圍內使用auto&&& -based 循環:
auto&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&案 請引用的型別。如果是左值引用,則保持不變;否則,它會綁定並保留臨時代理,從而使程式碼能夠正確執行。
以上是為什麼在 `std::vector` 上使用基於範圍的 For 迴圈會導致錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!