全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1296
推到 Plurk!
推到 Facebook!

STL之random_shuffle演算法....結果都一樣?!

尚未結案
okeyla
一般會員


發表:51
回覆:20
積分:19
註冊:2003-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-26 23:28:38 IP:211.76.xxx.xxx 未訂閱
程式一開始有一個vector, 內部元素為1~10正整數依序排好. 我使用random_shuffle試圖去打亂它. 執行檔每次執行,亂排的結果怎麼都一樣呢? 怎麼讓它每次執行的結果都不一樣咧?
a_mi
一般會員


發表:43
回覆:43
積分:22
註冊:2003-12-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-27 11:57:37 IP:61.218.xxx.xxx 未訂閱
我沒用過random_shuffle..但我用過Random,應該類似吧 你試試在
mkbobo
一般會員


發表:4
回覆:68
積分:19
註冊:2003-04-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-27 14:08:18 IP:61.222.xxx.xxx 未訂閱
random_shuffle 它有兩個型態
 
第一種
  inline void random_shuffle (RandomAccessIterator first,
                              RandomAccessIterator last)
  {
    __random_shuffle(first, last, __distance_type(first));
  }
第二種
  void random_shuffle (RandomAccessIterator first,  RandomAccessIterator last,
                       RandomNumberGenerator& rand);     
有沒有發現它有什麼不同阿~~^^ 第一個 他帶入的永遠是你傳入第一個當它的亂數種子 第二個 卻是帶入一個亂數產生器 而這個亂數產生器 是使用者自訂的 以下為程式碼
    class MyRandom {
  public:
    ptrdiff_t operator()(ptrdiff_t max) {
        double tmp;
        LARGE_INTEGER lpPerformanceCount;
        QueryPerformanceCounter( &lpPerformanceCount ); //利用來做種子的
        int a=static_cast(lpPerformanceCount.LowPart&0xffff);
        tmp = static_cast(a)/
                static_cast(0xffff);
        return static_cast< ptrdiff_t>(tmp * max);
    }
};        vector coll;
    for(int i=1;i<9;i  )
    {
        coll.push_back(i);
    }
    AnsiString str;
    MyRandom rd;
    random_shuffle(coll.begin(),coll.end(),rd);
    for(vector::iterator pos = coll.begin();
        pos != coll.end();pos  )
    str  = IntToStr(*pos) " ";
    Memo1->Lines->Add(str);    
這段程式碼我是參考 The C Standard Library 作者(Nicolai M.Josuttis) 做一些修改 他原本是利用rand()做種子 但是有個缺點 每第一次執行程式時 結果都一樣 你也可以去修改種子~~達到你要的目的^^
系統時間:2024-05-18 12:42:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!