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中文网其他相关文章!