如何使用范围来补充 std::vector 的值,以便<bool>通过引用获取元素



我需要补充std::vector<bool>的值。所以我想到了使用范围作为循环元素的参考。但是编译器给了我以下错误

error: cannot bind non-const lvalue reference of type 'std::_Bit_reference&' to an rvalue of type 'std::_Bit_iterator::reference'
13 |     for (auto& bit : rep)

这是我的样本代码

#include <iostream>
#include <vector>
int main() {
std::vector<bool> rep;
rep.push_back(true);
rep.push_back(false);
rep.push_back(true);
rep.push_back(false);
rep.push_back(true);
rep.push_back(false);
for (auto& bit : rep)
bit = !bit;
}

您可以将它们(返回的代理对象(绑定到右值引用

for (auto&& bit : rep)
bit = !bit;

导螺杆

您也可以使用std::vector<bool>::flip来切换vector<bool>中的每个值。

std::vector<bool> rep{true, false, true, false, true, false};
for(bool v: rep)
std::cout << v; 
std::cout << 'n';
rep.flip();
for(bool v: rep)
std::cout << v;

输出:

101010
010101

std::vector<bool>::reference是存储在其下的代理类型,其还具有翻转函数std::vector<bool>::reference::flip

for(auto&& v: rep)
v.flip();

最新更新