我不知道为什么它不起作用。我尝试用push_back做它,它也不起作用。
当我尝试调试时,我收到错误:
GeneticAlgorithm(8942,0x7fffc40183c0)malloc: * mach_vm_map(size = 1059546636242944)失败(错误代码= 3) * 错误:无法分配区域 ***在malloc_error_break中设置断点以进行调试 libc ++ abi.dylib:以std :: bad_alloc类型的未捕获异常终止:std :: bad_alloc
我也尝试调整vectorOfIndividuals的大小,但后来我得到了BAD_ACCESS ERROR
Population children(population);
population.getVectorOfIndividuals().insert(population.getVectorOfIndividuals().begin(),children.getVectorOfIndividuals().begin(),children.getVectorOfIndividuals().end());
人口复制构造函数:
Population::Population(const Population &populationToSave){
vectorOfIndividuals = populationToSave.vectorOfIndividuals;
bestFitnessScore = populationToSave.bestFitnessScore;
}
吸气剂:
vector<Individual> Population::getVectorOfIndividuals(){
return vectorOfIndividuals;
}
我非常感谢你的帮助。
答案 0 :(得分:2)
你的getter必须返回一个引用,而不是副本:
vector<Individual>& Population::getVectorOfIndividuals()
{
return vectorOfIndividuals;
}
否则,当你这样做时:
population.getVectorOfIndividuals().insert(population.getVectorOfIndividuals().begin(),children.getVectorOfIndividuals().begin(),children.getVectorOfIndividuals().end());
您将不同的对象混合在一起(在另一个对象的开头插入一个......因为每次调用population.getVectorOfIndividuals()
都会返回一个不同的vector<Individual>
对象:它就像在执行vectorA.insert(vectorB.begin(),vectorC.begin(),vectorC.end())
一样,这是无效的...... vectorA
和vectorB
必须是同一个对象。)
答案 1 :(得分:1)
你的方法:
vector<Individual> Population::getVectorOfIndividuals()
按值返回向量实例,这意味着每次调用此方法时都会创建一个新副本。首先,您传递另一个向量的begin()
,其中您调用insert,begin()
和end()
的子对象也是2个不同容器的迭代器。即使您正确传递参数,insert
的结果也会被删除。很可能您希望该方法通过引用返回vector<Individual>
。