[分享] 亂數產生器的好幫手 generate_n
有時候我們在寫測試程式時,需要產生一些亂數資料 eq.排序
最簡單的方式就是用迴圈
for(int i=0;i<N;i++)
a[i] = rand_num_gen();
STL 提供了很簡潔的語法 (reference by Thinking in C++)
generate_n(a,N,rand_num_gen);
以下是簡單的產生 1~100 之間的亂數到 a 陣列的範例程式:
==========================================================
#include <ctime>
#include <cstdlib>
#include <cassert>
#include <algorithm>
#include <iterator>
#include <iostream>
using namespace std;
class RandGen
{
int l_; int h_;
public:
RandGen(int l,int h): l_(l), h_(h){
assert(l_ < h_);
srand((unsigned)time(0));
}
int operator() (){
int range=(h_-l_)+1;
return l_ + static_cast<int>(range*rand()/(RAND_MAX + 1.0));
}
};
int main()
{
const int N = 20;
int a[N];
generate_n(a,N,RandGen(1,100));
copy(a,a+N,ostream_iterator<int>(cout," "));
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.57.74.177
→
12/27 22:15, , 1F
12/27 22:15, 1F
→
12/27 23:07, , 2F
12/27 23:07, 2F
→
12/28 00:22, , 3F
12/28 00:22, 3F
推
12/28 07:28, , 4F
12/28 07:28, 4F
推
12/28 07:32, , 5F
12/28 07:32, 5F
推
12/28 14:48, , 6F
12/28 14:48, 6F
→
12/28 14:49, , 7F
12/28 14:49, 7F
→
12/28 14:50, , 8F
12/28 14:50, 8F
→
12/28 14:52, , 9F
12/28 14:52, 9F
→
12/28 18:25, , 10F
12/28 18:25, 10F