Вот C++11
способ достижения вашей цели.Как подчеркивает @seccpur, лучший способ - перегрузить оператор потока <<
.Я взял на себя смелость и немного изменил ваш код, используя class
вместо struct
.Он также покажет вам еще одно использование оператора потока <<
при игре с классами.
#include <iostream>
#include <string>
#include <vector>
#include <random>
class Individual
{
public:
Individual() : fitness(0)
{
gene.reserve(5);
std::random_device random_dev;
std::mt19937 generator(random_dev());
std::uniform_int_distribution<int> distr(0, 100);
for (std::size_t i = 0; i < 5; ++i)
gene.push_back(distr(generator) % 2);
}
~Individual() {};
private:
std::vector<int> gene;
int fitness;
private:
friend std::ostream& operator<<(std::ostream& stream, const Individual& individual);
};
std::ostream& operator <<(std::ostream& stream, const Individual& individual)
{
stream << "Gene = ";
for (std::size_t i = 0; i < individual.gene.size(); ++i)
stream << individual.gene[i] << " ";
stream << "Fitness = " << individual.fitness <<'\n';
return stream;
}
std::vector<Individual> population(5);
int main()
{
for (int i = 0; i < population.size(); i++)
std::cout << population[i];
return 0;
}
В приведенном выше примере вы должны абсолютно объявить следующее:
friend std::ostream& operator<<(std::ostream& stream, const Individual& individual);
Перегрузка оператора объявляется friend
из Individual
class
для доступа к его закрытым элементам.
Также позаботьтесь о функции rand()
.Используйте как есть, он всегда будет генерировать одинаковые числа.Вы должны предоставить семя для генератора чисел.Один из его использования может быть:
srand(time(NULL)); // Needed one time.
rand() % 2; // Can be used multiple time