繁体   English   中英

的std ::矢量 <bool> 只有一个真正的元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM