查看: 2255|回復: 0
打印 上一主題 下一主題

[C/C++] random_shuffle 的使用方法

[複製鏈接]
  • TA的每日心情
    慵懶
    2015-4-10 14:18
  • 簽到天數: 78 天

    [LV.6]常住居民II

    176

    主題

    612

    帖子

    3959

    積分

    管理員

    Rank: 9Rank: 9Rank: 9

    積分
    3959

    台南一中資訊社新手達陣程式設計達人 - 2014

    跳轉到指定樓層
    樓主
    發表於 2014-8-27 13:33:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

    趕快加入我們來參與討論吧!

    您需要 登錄 才可以下載或查看,沒有帳號?加入我們

    x
    1.直接用STL random_shuffle函數直接打亂陣列

    random_shuffle有兩個參數,第一個是欲打亂的陣列開頭,第二個是欲打亂的陣列結尾再加1,為什麼加一呢?因為在STL的設計,區間都是包含開頭,但不包含結尾,而且如此一來,所增加的偏移量會恰等於元素個數,寫起來更方便。
    [C++] 純文本查看 復制代碼
    #include<iostream>
    #include<algorithm>
    #include<cstdlib>
    #include<ctime> 
    using namespace std;
    
    int main()
    {
            //用time(null)初始化亂數 
            srand(time(NULL));
    
            int arr[20];
            //1. 先按照1~20放進去
            for(int i=0;i<20;++i)
                    arr[i]=i+1;
            //用STL直接打亂 arr[0] ~ arr[19]
            random_shuffle( arr , arr+20 );
    
            for(int i=0; i<20; ++i)
            {
                    cout<<arr[i]<<' ';
            }
    }


    2.自己寫random_shuffle,在這裡示範random_shuffle是如何打亂陣列的。
    swap(a,b) 交換a,b兩變數的數值
    [C++] 純文本查看 復制代碼
    #include<iostream>
    #include<algorithm>
    #include<cstdlib>
    #include<ctime> 
    using namespace std;
    
    int main()
    {
            //用time(null)初始化亂數 
            srand(time(NULL));
    
            int arr[20];
            //1. 先按照1~20放進去
            for(int i=0;i<20;++i)
                    arr[i]=i+1;
            //random_shuffle
            for(int i=0;i<20;++i)
                    swap( arr[i] , arr[rand()%(i+1)] );
    
            for(int i=0; i<20; ++i)
            {
                    cout<<arr[i]<<' ';
            }
    }



    回復

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表