Случайный — когда я получаю индекс вектора в C ++, он всегда возвращает последнее значение, которое отодвинуто назад

Я создаю глобальный вектор. После этого я добавляю значения с помощью функции push_back. Но когда я хочу получить произвольный индекс вектора, он всегда возвращает последнее значение, которое было передано. Код следующий:

struct Choromosome{
float fitness;
float selectionProb;
bool isSelected;
int conflictNum;
int* geneCode;
};
int SIZE = 6;
int START_SIZE = 50;
vector<Choromosome> population;

void initialize(){
for(int k = 0; k < START_SIZE; k++){
Choromosome c;
int* code = new int[SIZE];
srand(time(NULL));
for(int i = 0; i < SIZE; i++){
code[i] = rand() % SIZE;
}
c.geneCode = code;
population.push_back(c);
}
int rand1 = rand() % START_SIZE;
int rand2 = rand() % START_SIZE;
std::ostream_iterator< int > output( cout, " " );
std::copy( population[rand1].geneCode, population[rand1].geneCode+ SIZE, output );
std::copy( population[rand2].geneCode, population[rand2].geneCode+ SIZE, output );
}

1

Решение

Проблема в том, что вы сеете с srand(time(NULL)); каждая итерация

Если вы проверите сгенерированные числа, вы увидите, что они одинаковы для всех Chromosome,

Вы должны либо вынуть из for тот srand() или дайте ему текущий параметр времени.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]