2013-04-12 42 views

回答

2

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

不要忘了,雖然種子的隨機數發生器.... –

+0

這取決於目標,有時候你不想刻意去做'srand'或做'srand(constant)' –

+0

我喜歡你的印刷聲明......我偷了它,如果你不介意 – Escualo

1

Live Demo

我有一個可重複使用的功能略爲傾向於生成單獨的「行」,然後根據需要創建完整的「矩陣」。運行時間爲其他答案(由「Live Workspace的」決定幾乎相同(運行時間約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; 
} 
+0

任何人都知道爲什麼編譯器的運行時間如此不同?如果您嘗試使用舊版本的實時工作區演示的gcc,運行時間被削減了一半! – Escualo

+1

關於「// rvo,或者使用std :: move」 - 你不應該在這裏使用'std :: move' - 它只會禁用可能的'NRVO'。如果編譯器不能使用'NRVO',它會自動移動它(不需要'std :: move')。 –

+0

@EvgenyPanasyuk:謝謝! – Escualo