我会尝试这几分钟,但我怀疑你想
BOOST_FOREACH(std::vector<bool>::reference b, boolvector)
{
b = false;
}
std::vector<bool>
,就像你说的,是“破”,并访问一个迭代器不给你一个很好的方便的参考,它给你一些代理对象:http://en.cppreference.com/w/cpp/container/vector_bool
编辑:是的,这个作品:
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
void print (const std::vector<bool>& bv)
{
std::cout << std::boolalpha;
for (auto it = std::begin(bv); it != std::end(bv); ++it)
std::cout << *it << ' ';
std::cout << '\n';
}
int main()
{
std::vector<bool> boolvector {true, false, true, false};
print(boolvector);
BOOST_FOREACH(std::vector<bool>::reference b, boolvector)
{
b = false;
}
print(boolvector);
}
打印:
$ ./a.out
true false true false
false false false false
此:
BOOST_FOREACH(auto b, boolvector)
也可以,但是
BOOST_FOREACH(auto& b, boolvector)
不(编译失败是由于非const
参考暂时的)。
然而,正如纳瓦兹指出,如果你有C++ 11的支持,只是沟BOOST_FOREACH
完全,并写上:
for (auto b : boolvector)
很久以后编辑:
我不知道我如何在第一时间错过了这一点,但它看起来像正确的解决方案在这里是用assign
:
b.assign(b.size(), false);
b[i] = true;
'我知道性病::向量是一个一文不名事情是这样吗? – Nbr44
@ Nbr44'std :: vector'不是'std :: vector '与'T = bool'的实例化。这是一个专门化,每个'bool'只需要'1'位。这意味着它不会给你引用包含的'bool's,它给你代理对象。基本上它不像'std :: vector'的其他实例一样,这被广泛认为是一个错误。从设计的角度来看,“破碎”不是技术性的。 –
BoBTFish
它看起来像一个函数声明,其中bool b是按值调用的,而不是参考 – hetepeperfan