Проблема такая.
Мне необходимо заполнить вектор элементами:
| Код | for(unsigned int i = 0; i < 10; i++) { _Ty obj; my_vector.push_back(obj); }
|
_Ty это шаблонный параметр. При инициализации объекта obj вызывается конструктор, который выглядит примерно так:
| Код | CObj::CObj() { time_t ltime; time(<ime); srand(ltime); randomVal = (double) rand() / RAND_MAX; }
|
Однако, при распечатке оказывается, что все 10 сгенерированных объектов имеют одно и то же случайное число. Вопрос, почему так происходит (тривиальное объяснение слишком быстро проходит этап генерации и для всех десяти используется одно и то же страмляющее зерно, в результате последовательность, генерируемая rand() всякий раз одна и та же).
И если это так то как этого избежать? Добавлено @ 03:40 Собственно решение, которое придумалось буквально только что:
| Код | CObj::CObj() { static long i = 10; time_t ltime; time(<ime); srand(ltime + i); activation = (double) rand() / RAND_MAX; i+=ltime; }
| |