[英]std::vector<bool> with only one true element
我需要一个std::vector<bool>
,其中只有一个元素可能在程序中稍后生效。 我的尝试是(在for循环中)
BOOST_FOREACH( bool b, boolvector)
{
b = false;
}
boolvector[j] = true;
但是当执行此元素时,在执行BOOST_FOREACH时(升级库的功能可以更方便地通过容器迭代),不会将其重置为false(请参阅boost文档 )。
PS:我知道std :: vector是一个破碎的东西,但它应该足够了。
我会在几分钟内尝试这个,但我怀疑你想要
BOOST_FOREACH(std::vector<bool>::reference b, boolvector)
{
b = false;
}
正如你所说, std::vector<bool>
是“破碎的”,并且取消引用迭代器并没有给你一个很好的方便的引用,它给你一些代理对象: http : //en.cppreference.com/w/ CPP /容器/ 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.