【发布时间】:2013-07-26 11:24:49
【问题描述】:
我需要一个std::vector<bool>,其中只有一个元素在程序后面可能为真。
我的尝试是(在 for 循环中)
BOOST_FOREACH( bool b, boolvector)
{
b = false;
}
boolvector[j] = true;
但是当它执行时,在执行 BOOST_FOREACH 时元素不会重置为 false(boost 库的函数可以更方便地通过容器进行迭代(请参阅boost documentation)。
P.S.:我知道 std::vector 是个坏东西,但应该足够了。
【问题讨论】:
-
I know that std::vector is a broken thing是这样吗? -
@Nbr44
std::vector<bool>不是std::vector<T>与T=bool的实例化。这是一种特殊化,每个bool只占用1位。这意味着它不会为您提供对包含的bools 的引用,而是为您提供代理对象。基本上它的行为方式与std::vector的其他实例不同,这被广泛认为是一个错误。从设计的角度来看“破碎”,而不是技术角度。 -
它看起来像一个函数声明,其中 bool b 是按值调用的,而不是引用
-
我认为您可以改用
std::bitset(或boost::dynamic_bitset)。你试过了吗? -
我建议将向量替换为真正元素的索引。
标签: c++ boost vector foreach boolean