在功能相同的結果,我想生成數字的範圍列表: (此功能將在執行程序時,只能調用一次。)的std :: random_shuffle產生即使函數srand(時間(0))被調用一次
void DataSet::finalize(double trainPercent, bool genValidData)
{
srand(time(0));
printf("%d\n", rand());
// indices = {0, 1, 2, 3, 4, ..., m_train.size()-1}
vector<size_t> indices(m_train.size());
for (size_t i = 0; i < indices.size(); i++)
indices[i] = i;
random_shuffle(indices.begin(), indices.end());
// Output
for (size_t i = 0; i < 10; i++)
printf("%ld ", indices[i]);
puts("");
}
的結果是這樣的:
850577673
246 239 7 102 41 201 288 23 1 237
幾秒鐘後:
856981140
246 239 7 102 41 201 288 23 1 237
多:
857552578
246 239 7 102 41 201 288 23 1 237
爲什麼rand()
正常工作的功能,但`random_shuffle」不?
的可能重複【如何確保標準::隨機\ _shuffle總是會產生不同的結果?](http://stackoverflow.com/questions/6931951/how-to-make-sure-that-stdrandom- shuffle-always-produce-a-different-result) –
在程序開始時,你只應該調用'srand()'一次。此外,請參閱[this](http://stackoverflow.com/questions/6926433/how-to-shuffle-a-stdvector-in-c)和[this](http://stackoverflow.com/questions/13459953/random-shuffle-not-really-random) –
@JonathonReinhart,不是重複的,因爲他曾經叫過srand'。對? –