插入向量不会插入值

时间:2017-01-04 19:04:04

标签: c++ stl

我不知道为什么它不起作用。我尝试用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;

}

我非常感谢你的帮助。

2 个答案:

答案 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())一样,这是无效的...... vectorAvectorB必须是同一个对象。)

答案 1 :(得分:1)

你的方法:

vector<Individual> Population::getVectorOfIndividuals()

按值返回向量实例,这意味着每次调用此方法时都会创建一个新副本。首先,您传递另一个向量的begin(),其中您调用insert,begin()end()的子对象也是2个不同容器的迭代器。即使您正确传递参数,insert的结果也会被删除。很可能您希望该方法通过引用返回vector<Individual>