template<class RandomIt> void random_shuffle(RandomIt first, RandomIt last);
// deprecated in C++14
使用无法控制的实现定义的随机源。
实现中经常使用std::rand
,所以调用std::srand
播种prng可以工作但是它不便携.
您可以使用随机洗牌 http://en.cppreference.com/w/cpp/algorithm/random_shuffle这需要第三个参数:
C++11(示例来自http://en.cppreference.com http://en.cppreference.com)
#include <random>
#include <algorithm>
#include <iterator>
#include <iostream>
int main()
{
std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(v.begin(), v.end(), g);
copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
}
or
C++03
...
int my_random(int i) { return std::rand() % i;}
std::srand(seed);
std::random_shuffle(myOrder.begin(), myOrder.end(), my_random);
...