C++ 向量初始化遗传算法的代理向量
C++ vector initialise a vector of agents for a genetic algorithm
我有以下 C++ 代码,但我主要在以下内容中遇到一些错误(在代码块之后)代理只是我在单独文件中创建的 class
vector<Agent> population;
for (vector<int>::iterator i = population.begin(); i != population.end(); ++i) {
population.push_back(new Agent(generateDna(targetString.size())));
}
我收到以下错误
- no suitable user-defined conversion from "__gnu_cxx::__normal_iterator>>" to "__gnu_cxx::__normal_iterator>>" exists
2.no operator "!=" matches these operands -- operand types are: __gnu_cxx::__normal_iterator>> != __gnu_cxx::__normal_iterator>>
3.no instance of overloaded function "std::vector<_Tp, _Alloc>::push_back [with _Tp=Agent, _Alloc=std::allocator]" matches the argument list -- argument types are: (Agent *) -- object type is: std::vector>
我是 c++ 的新手,所以这些东西可能不言自明,但我不知道它们是什么意思。
主要问题是您正在遍历在循环中追加的集合,甚至是通过定义为 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())));
}
您当前的编译问题是您试图将 std::vector<Agent>::iterator
存储到 std::vector<int>::iterator
中。这是两种完全不同的类型。
然后是你的运行时问题(在你实际添加元素到你的容器之后,因为现在你有 none),你的迭代器可能在 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())));
}
我有以下 C++ 代码,但我主要在以下内容中遇到一些错误(在代码块之后)代理只是我在单独文件中创建的 class
vector<Agent> population;
for (vector<int>::iterator i = population.begin(); i != population.end(); ++i) {
population.push_back(new Agent(generateDna(targetString.size())));
}
我收到以下错误
- no suitable user-defined conversion from "__gnu_cxx::__normal_iterator>>" to "__gnu_cxx::__normal_iterator>>" exists
2.no operator "!=" matches these operands -- operand types are: __gnu_cxx::__normal_iterator>> != __gnu_cxx::__normal_iterator>>
3.no instance of overloaded function "std::vector<_Tp, _Alloc>::push_back [with _Tp=Agent, _Alloc=std::allocator]" matches the argument list -- argument types are: (Agent *) -- object type is: std::vector>
我是 c++ 的新手,所以这些东西可能不言自明,但我不知道它们是什么意思。
主要问题是您正在遍历在循环中追加的集合,甚至是通过定义为 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())));
}
您当前的编译问题是您试图将 std::vector<Agent>::iterator
存储到 std::vector<int>::iterator
中。这是两种完全不同的类型。
然后是你的运行时问题(在你实际添加元素到你的容器之后,因为现在你有 none),你的迭代器可能在 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())));
}