向量中布尔值的均匀分布
Uniform Spread of boolean values in a vector
我有一个布尔向量,例如:
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(创建一个向量,随机洗牌值,计算1并将其用作所需的数量,然后将其全部设置回0。 现在,您有一个所需数量的 1 作为目标,以便在向量内均匀分布。2(使用matlabs linspace函数的C++实现(可以在这里找到一些变体:https://gist.github.com/jmbr/2375233(。 当您输入所需的 1 数量和向量的大小时,它会返回等距点,您可以向下舍入以在向量中创建索引。3( 将这些点设置为 1。
结果是一个完全间隔的向量。
相关文章:
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 重载更少,则运算符返回相反的布尔值
- 将此布尔值传递给此函数的最有效方法是什么?
- 如何设置 c++ 类的布尔值?
- 使用 MAKEWORD / MAKEWPARAM 使用布尔值而不是布尔值
- 将 10 个线程与原子布尔值同步
- 创建类似于布尔值的变量类型
- 布尔值向量的基于范围 for 循环
- 零点和布尔值之间的比较
- 简化对两个布尔值的 4 个 if/else 检查
- 无法创建带有布尔值和矢量的地图
- 对于完成布尔值设置为 true 后未停止的循环
- fstream / ifstream / ofstream 对象如何转换为布尔值
- C++:将值赋值给原始数据类型(例如布尔值)是原子操作吗?
- 为什么布尔值不能比作最后一点?
- 如何使用返回布尔值的函数?
- 将uintptr_t转换为布尔值会使 SSO 基准速度减慢数倍
- 向量中布尔值的均匀分布