33921


タイトルの通り、vectorの要素をシャッフルしたいのですが毎回同じになってしまい困っています。

どなたか間違いのご指摘お願いできないでしょうかm(_ _)m

**\-----動作環境-----**

**g++ --version**

[code]

    Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-  dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/De
    veloper/SDKs/MacOSX10.12.sdk/usr/include/c++/4.2.1
    Apple LLVM version 8.0.0 (clang-800.0.42.1)
    Target: x86_64-apple-darwin16.4.0
    Thread model: posix
    InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
    
[/code]

**OS info**

[code]

    ProductName:    Mac OS X
    ProductVersion: 10.12.3
    BuildVersion:   16D32
    
[/code]

**コンパイル方法**

[code]

    g++ test.cpp
    
[/code]

**test.cppの中身**

[code]

    #include <iostream>
    #include <ctime> // time
    #include <cstdlib> // rand
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    int main(){
        vector<int> v;
        for(int i=1; i<=5; ++i) v.push_back(i);
    
        cout << "vector before shuffling : ";
    
        vector<int>::const_iterator iter;
        for(iter=v.begin(); iter!=v.end(); ++iter) cout << *iter << ' ';
    
        cout << endl << endl;
    
        // shuffle vector
        srand(time(0));
        random_shuffle(v.begin(), v.end());
    
        cout << "vector after shuffling : ";
        for(iter=v.begin(); iter!=v.end(); ++iter) cout << *iter << ' ';
    
        return 0;
    }
    
[/code]


CC BY-SA 3.0
2017-04-10T23:37:09.450
33918
2017-04-11T01:24:32.067
2017-04-11T00:21:11.913
18535
18535
question
c++
vectorの要素をrandom_shuffleを使ってシャッフルしたいが、srand(time(0))とシードの設定をしてもシャッフルが毎回同じになってしまう


774RRさんがすでにコメントされていますが、Mac
OSの実装では`srand(time(0))`で初期化すると短期的には最初の`rand()`の結果が毎秒`16807`ずつ増加するという規則性があります。この仕様により固定的な動作をしてしまう場合があります。詳細は[こちらの回答](https://ja.stackoverflow.com/a/12005/4236)。


CC BY-SA 3.0
2017-04-11T01:24:32.067
33921
2017-04-11T01:24:32.067
2017-04-13T12:52:38.920
-1
4236
33918
answer