C ++向量初始化遗传算法的媒介向量

时间:2018-09-10 18:57:49

标签: c++ vector genetic-algorithm

我有以下C ++代码,但主要在诸如以下代码(在代码块之后)之类的地方出现一些错误,该代理只是我在单独文件中创建的一个类

vector<Agent> population;
for (vector<int>::iterator i = population.begin(); i != population.end(); ++i) {
    population.push_back(new Agent(generateDna(targetString.size())));
}

我遇到以下错误

  
      
  1. 从“ __gnu_cxx :: __ normal_iterator >>”到“ __gnu_cxx :: __ normal_iterator >>”的用户定义的转换不存在
  2.   
     

2.no运算符“!=”匹配这些操作数-操作数类型为:__gnu_cxx :: __ normal_iterator >>!= __gnu_cxx :: __ normal_iterator >>

     

3.no重载函数“ std :: vector <_Tp,_Alloc> :: push_back [with _Tp = Agent,_Alloc = std :: allocator]”的实例与参数列表匹配-参数类型为:(Agent * )-对象类型为:std :: vector>

我是c ++的新手,所以这些事情可能是不言而喻的,但我不知道它们的含义。

2 个答案:

答案 0 :(得分:-2)

主要问题是您要遍历在循环中甚至通过定义为int而不是Agent的迭代器追加的集合。创建新矢量,并将生成的值推入该新矢量。

也请注意使用new关键字。您必须稍后取消该内存。

解决方案:

vector<Agent> population;
vector<Agent> newPopulation;
for (vector<Agent>::iterator i = population.begin(); i != population.end(); ++i) {
    newPopulation.push_back(Agent(generateDna(targetString.size())));
}

答案 1 :(得分:-2)

您当前的编译问题是您正在尝试将std::vector<Agent>::iterator存储到std::vector<int>::iterator中。这是两种完全不同的类型。

然后就是您的运行时问题(在您实际上向容器中添加元素之后,因为现在您没有元素),迭代器在push_back之后可能会失效,并且您将拥有UB,因为您正在修改容器在循环播放时。

然后就是一个问题,您试图将Agent*存储到Agent的向量中。


总共:

std::vector<Agent> population;

//fill your vector.. otherwise loop is useless because size is 0..
auto size = population.size();
for (unsigned int i = 0; i < size; ++i) {
    population.push_back(Agent(generateDna(targetString.size())));
}