我需要补充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();