如何用 <bool>0 和 1 随机填充矢量<矢量>

How to randomly fill vector<vector<bool>> with 0s and 1s

本文关键字:gt lt 填充 随机 矢量 何用 bool      更新时间:2023-10-16

用0和1随机化vector<vector<bool>>的最简单方法是什么?我没能在网上找到答案,所以如果可以的话,请提供参考,我将不胜感激。

谢谢。

LIVE DEMO

#include <algorithm>
#include <iterator>
#include <iostream>
#include <ostream>
#include <cstdlib>
#include <vector>
using namespace std;
#define let const auto&
int main()
{
    let size = 128;
    let inner_size_max = 16;
    vector<vector<bool>> vs(size);
    for(auto &v : vs)
        generate_n(back_inserter(v),rand()%inner_size_max,[]
        {
            return rand()%2==0;
        });
    for(let v : vs)
    {
        for(let b : v)
            cout << b;
        cout << endl;
    }
}

现场演示

我稍微倾向于使用可重用的函数来生成单个"行",然后根据需要创建完整的"矩阵"。运行时几乎与其他答案相同(由"活动工作区"确定(运行时大约0.1秒)

#include<iostream>
#include<vector>
#include<cstdlib>
#include<algorithm>
// this is a transparent, reusable function
template<size_t N>
std::vector<bool> generate_bits() {
  std::vector<bool> bits;
  bits.reserve(N);
  for(size_t k=0; k<N; k++) {
    bits.push_back(rand() % 2 == 0);
  }
  return stdbits; // rvo, or use std::move
}
int main() {
  std::vector<std::vector<bool>> bits;  
  bits.resize(128);  
  std::generate(bits.begin(), bits.end(), generate_bits<16>);
  // stole the cool printing statement
  for(auto&& v : bits) {
    for(auto&& b : v) {
      std::cout<<b;
    }
    std::cout<<std::endl;
  }  
  return 0;
}