看板 C_and_CPP 關於我們 聯絡資訊
有時候我們在寫測試程式時,需要產生一些亂數資料 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
loveme00835:我覺得 <random> 比較好用 12/27 22:15
loveme00835:just like this : http://codepad.org/OE885KQs 12/27 23:07
spider391:哈 學到一個更讚的東西了 讚^^ 12/28 00:22
DirkC:原po的第18行改成double在gcc 4.4下才會是輸出正確結果 12/28 07:28
DirkC:另外tr1/random裏面迴圈加遞迴,實測原po的速度較快,看用途囉 12/28 07:32
avhacker:l 跟 h 可以改成 template 參數,反正 run time 時不變 12/28 14:48
avhacker:變成 template<int, int>class RandGen{....}; 12/28 14:49
avhacker:還有 member function 應該改成 const 12/28 14:50
loveme00835:by value 傳遞也可以不用 const @_@ 12/28 14:52
spider391:謝謝D 大,我只有在 VC10 上測過 XD 12/28 18:25