我会在几分钟内试试这个,但我怀疑你想要
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
引用临时文件而无法编译)。
然而,正如 Nawaz 指出的那样,如果你有 c++11 支持,那就BOOST_FOREACH
完全放弃,然后写:
for (auto b : boolvector)
很久以后编辑:
我不知道我一开始是怎么错过的,但看起来正确的解决方案是使用assign
:
b.assign(b.size(), false);
b[i] = true;