В функции я хочу создать список чисел в диапазоне: (Эта функция будет вызываться только один раз при выполнении программы.)
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' нет?
srand()
только один раз, в начале вашей программы. Также см. это и это - person Jonathon Reinhart   schedule 19.03.2014srand
. Правильно? - person Paul Draper   schedule 19.03.2014rand()
работает, аrandom_shuffle()
не имеет никаких ассоциаций сsrand()
. - person Dawei Yang   schedule 19.03.2014srand()
в функциюmain
, но результаты аналогичны. - person Dawei Yang   schedule 19.03.2014srand()
. - person yasouser   schedule 19.03.2014random_shuffle(begin(indices), end(indices), [](int n) { return rand() % n; });
дает другой результат, но если я изменю свой генератор случайных чисел на default_random_engine(), тогда возникнут проблемы. Таким образом, возникает вопрос, почемуdefault_random_engine()
не работает. - person Dawei Yang   schedule 19.03.2014