你好,我正在尝试用 C++ 创建一个遗传算法,我尝试使用 vector 作为容器,问题是我不知道如何设置 vector 的大小,因为 vector 有一个像这样的类参数
class population
{
friend class chromosome;
private:
int population_number;
int best_index[2];
vector <chromosome *> chromosome_population;
public:
population(int numberOfPopulation);
population(int numberOfPopulation,int numberOfSynapse);
~population();
int worst_chromosome();
void mating();
void crossover(int parent_1,int parent_2);
};
这是种群类,这是染色体类
class chromosome
{
friend class population;
private:
int chromosome_id;
float fitness;
vector <gen *> gen_chromosome;
public:
chromosome();
~chromosome();
void fitness_function();
void mutation_translocation();
int get_chromosome_size();
};
如何在 population 类构造函数中设置 vector 长度?我试过使用 vector.pushback 和 vector.resize 但两者都会给我错误,因为参数不匹配。其实我明白为什么它会变成错误,但我不知道如何匹配 vector 推回中的参数这是我的人口构造函数
population::population(int numberOfPopulation)
{
srand (time(NULL));
population_number = numberOfPopulation;
for(int a=0;a<population_number;a++)
{
chromosome_population.push_back();
}
cout<<chromosome_population.size();
for(int i=0;i<population_number;i++)
{
chromosome_population[i]->chromosome_id = i;
int chromosome_length = rand() % 10 + 1;
for(int j=0;j<chromosome_length;j++)
{
chromosome_population[i]->gen_chromosome[j]->basa_biner = rand()%1;
chromosome_population[i]->fitness = (rand()%99)+1;
}
}
}
如果您还需要任何其他信息,可以在评论中告诉我,我会添加您需要的信息。先谢谢了。
最佳答案
std::vector
有几个constructors其中一个变体接受要存储在 vector
中的初始元素数.
指定 vector
的大小在population
构造函数的初始化列表:
population::population(int numberOfPopulation) :
population_number(numberOfPopulation),
chromosome_population(numberOfPopulation)
{
}
给这个方法,population_number
成员变量是不必要的,因为它可以通过 chromosome_population.size()
获得.
在 vector
上指定初始大小将意味着它包含 numberOfPopulation
空指针。在访问 vector
中的元素之前您需要创建对象,在本例中使用 new
.如果元素是可复制的并且不需要多态行为,那么建议使用 vector<chromosome>
反而。如果必须在 vector
中使用动态分配的元素那么你必须先分配:
chromosome_population[i] = new chromosome();
并记住 delete
当不再需要时。
还希望使用一种形式的智能指针而不是原始指针。使用智能指针的一个优点是当 vector<unique_ptr<chromosome>>
超出范围,元素将为您销毁,而无需显式调用 delete
在每个元素上。参见 What C++ Smart Pointer Implementations are available?获取可用智能指针的有用列表。
请注意 vector::push_back()
接受一个与其元素具有相同类型的参数。所以正确调用push_back()
是:
chromosome_population.push_back(new chromosome());
如果您指定 vector
的初始大小在施工中,调用push_back()
将在 vector
中的初始元素(在本例中为空指针)之后 添加元素.
关于C++ - 使用类参数定义 vector 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13450815/