布尔值在向量

时间:2017-11-16 22:29:20

标签: c++ vector

我有一个bool矢量,例如:

vector<bool> bVec;

我用循环内的随机1和0填充它:

bVec.push_back(0);
bVec.push_back(1);

我可以改变内容:

random_shuffle(bVec.begin(), bVec.end());

对于随机改组的向量,它可以正常工作,但是,如果我想要均匀分布的值,我似乎无法获得正确的向量。 即我想计算1和0的数量,并尽可能均匀地展开它们。例如,如果我有3个1和7个0,我会想要类似的东西 0,1,0,0,1,0,0,1,0,0(或类似)

编写我自己的函数已被证明是繁琐而耗时且容易出错。是否有一个我无法找到的功能呢?

感谢。

1 个答案:

答案 0 :(得分:1)

如果有人得到这个并且需要一个答案(而不是像上面的评论那样争论语义)我解决了这个问题如下,一步一步地用伪代码解释:

1)创建一个向量,随机改变值,计算1并将其作为所需的数量,然后将其全部设置为0。现在,您有一个所需数量的1作为目标,在矢量中均匀分布。 2)使用matlabs linspace函数的C ++实现(可在此处找到一些变体:https://gist.github.com/jmbr/2375233)。当你输入你想要多少1和矢量大小时,它会返回等距点,你可以向下舍入以在向量中创建索引。 3)将这些点设置为1。

结果是一个完美间隔的矢量。