C++ 标准::向量<;布尔>;只有一个真元素
我需要一个C++ 标准::向量<;布尔>;只有一个真元素,c++,boost,vector,foreach,boolean,C++,Boost,Vector,Foreach,Boolean,我需要一个std::vector,在这个程序中,以后只有一个元素可能为真。 我的尝试是(在一个for循环中) 但是在执行BOOST_FOREACH时,元素不会重置为false(BOOST库的函数,用于更方便地遍历容器(请参阅) 旁白:我知道std::vector是一个坏东西,但它应该足够了。我会在几分钟后尝试这个,但我怀疑你想要 BOOST_FOREACH(std::vector<bool>::reference b, boolvector) { b = false; }
std::vector
,在这个程序中,以后只有一个元素可能为真。
我的尝试是(在一个for循环中)
但是在执行BOOST_FOREACH时,元素不会重置为false(BOOST库的函数,用于更方便地遍历容器(请参阅)
旁白:我知道std::vector是一个坏东西,但它应该足够了。我会在几分钟后尝试这个,但我怀疑你想要
BOOST_FOREACH(std::vector<bool>::reference b, boolvector)
{
b = false;
}
这:
也可以,但是
BOOST_FOREACH(auto& b, boolvector)
没有(由于非-const引用临时文件而导致编译失败)
然而,正如Nawaz指出的,如果您有c++11支持,只需完全抛弃BOOST_FOREACH,编写:
for (auto b : boolvector)
以后编辑:
我不知道一开始我怎么会错过这一点,但看起来正确的解决方案是使用:
几分钟后我会试试这个,但我想你会喜欢的
BOOST_FOREACH(std::vector<bool>::reference b, boolvector)
{
b = false;
}
这:
也可以,但是
BOOST_FOREACH(auto& b, boolvector)
没有(由于非-const引用临时文件而导致编译失败)
然而,正如Nawaz指出的,如果您有c++11支持,只需完全抛弃BOOST_FOREACH,编写:
for (auto b : boolvector)
以后编辑:
我不知道一开始我怎么会错过这一点,但看起来正确的解决方案是使用:
我知道std::vector是一个坏东西
是这样吗?@Nbr44std::vector
不是std::vector
与T=bool
的实例化。它是一种专门化,使得每个bool
只取1
位。这意味着它不给您引用所包含的bool
s,It为您提供代理对象。基本上,它的行为与std::vector
的其他实例化不太一样,这被广泛认为是一个错误从设计的角度来看,这不是技术上的。它看起来像一个函数声明,其中bool b是按值调用的,而不是引用。我认为您可以使用std::bitset
(或boost::dynamic\u bitset
)相反。你试过了吗?我建议用真元素的索引替换向量。我知道std::vector是一个坏东西
是这样吗?@Nbr44std::vector
不是std::vector
与T=bool
的实例化。它是一种专门化,使得每个bool
只取1
位。这意味着它不会给您引用包含的bool
s,它会给您代理对象。基本上,它的行为方式与std::vector
的其他实例化方式不同,这被广泛认为是一个错误从设计的角度来看,这不是技术上的。它看起来像一个函数声明,其中bool b是按值调用的,而不是引用。我认为您可以使用std::bitset
(或boost::dynamic\u bitset
)相反。你试过了吗?我建议用真元素的索引来替换向量。是的,我现在看到了错误。但是也不可能得到一个位的引用吗?@BoBTFish:是的,你是对的。auto b
。顺便说一句,如果你使用auto
,为什么要使用BOOST\u FOREACH
呢?你可以使用基于范围的f或
;-)+1@Nawaz确切地我假设实际代码中没有c++11,因此首先使用了BOOST\u FOREACH
。我在示例中使用它是为了方便起见,因为对一个现在删除的答案发表了评论,所以我提到了auto
是的,我看到了我现在犯的错误。但是,一个比特的引用也不可能吗?@BoBTFish:是的,你说得对<代码>自动b。顺便说一句,如果您使用auto
,那么为什么要使用BOOST\u FOREACH
?您可以将基于范围的用于
;-)+1@Nawaz确切地我假设实际代码中没有c++11,因此首先使用了BOOST\u FOREACH
。为了方便起见,我在示例中使用了它,并提到了auto
,原因是对一个现已删除的答案的评论。
for (auto b : boolvector)
b.assign(b.size(), false);
b[i] = true;