将向量传递给函数
Passing vector to function
在尝试清理代码时遇到了一个似乎无法解决的问题。我试图将向量值传递给函数,这样我就可以在函数中而不是在主代码中进行求值,但我不知道如何正确地传递向量。
#include "stdafx.h"
#include <vector>
#include <random>
#include <string>
#include <fstream>
#include <algorithm>
#include <iterator>
int population_size = 10;
int number_of_variables = 3;
struct one_individual
{
std::vector<std::vector<double>>chromosomes;
double evaluation1 = 0;
double evaluation2 = 0;
double evaluation3 = 0;
double fitness = 0;
double probability = 0;
};
std::vector<one_individual> individuals;
double evaluation(std::vector<one_individual> individuals[i])
{
individuals[i].evaluation1 = 1 * individuals[i].chromosomes[0].at(0) + 2 * individuals[i].chromosomes[0].at(1) + 3 * individuals[i].chromosomes[0].at(2);
individuals[i].evaluation2 = 1.5 * individuals[i].chromosomes[0].at(0) + 3 * individuals[i].chromosomes[0].at(1) + 4.5 * individuals[i].chromosomes[0].at(2);
individuals[i].evaluation3 = 2 * individuals[i].chromosomes[0].at(0) + 4 * individuals[i].chromosomes[0].at(1) + 6 * individuals[i].chromosomes[0].at(2);
individuals[i].fitness = 1 / (individuals[i].evaluation1 + individuals[i].evaluation2 + individuals[i].evaluation3);
return individuals[i].fitness;
}
int main()
{
std::random_device rd;
std::mt19937 rng(rd()); // random-number engine (Mersenne-Twister in this case)
std::uniform_real_distribution<double> dist(-10.0, 10.0);
for (int i = 0; i < population_size; i++)
{
std::vector<double>variables;
for (int j = 0; j < number_of_variables; j++)
{
variables.push_back(dist(rng));
}
individuals[i].chromosomes.push_back(variables);
}
for (int i = 0; i < population_size; i++)
{
evaluation(individuals[i]);
std::cout << "Individual " << i << " has fitness of " << individuals[i].fitness;
}
}
我试着尽可能地压缩代码,这样就不会读太多,我认为仍然存在的所有东西都需要实际存在。
不管怎样,我试图将向量值传递给函数的方法都不起作用,我能找到的答案也无法为我澄清错误。
任何帮助都将不胜感激!
如果你想迭代通过向量并一次处理一个元素,你只需要通过传递正在迭代的类型
double evaluation(one_individual& person)
{
// do stuff with person
}
要迭代您的向量,您可以执行类似的操作
for (auto& person : individuals)
{
evaluation(person);
}
double evaluation(std::vector<one_individual> individuals[i])
应该是
double evaluation(std::vector<one_individual>& individuals)
还要去掉与参数名称相同的全局变量。首先没有理由宣布它是全球性的。
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用向量的template_back函数
- 如何通过派生类函数更改基类中的向量
- 变量没有改变?通过向量的函数调用
- 一对向量构造函数:初始值设定项列表与显式构造
- 在c++中使用向量时,如何调用构造函数和析构函数
- std::sort()函数无法对向量的一部分进行排序
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- C++中函数的向量返回类型引发错误
- 添加存储在向量中的大整数的函数出现问题
- 如何在 c++ 中定义接受不同参数类型的函数向量?
- 具有 lambda 函数的函数向量
- 你能用参数制作函数向量吗?
- 在C++中使用成员函数向量时,有没有办法实现协变返回类型
- 在编写 lambda 函数向量时出现隔离错误
- 如何在 boost.process 间共享内存中使用复杂结构"push_back"函数向量
- 是否将std矢量重新分配到默认的构造函数向量是擦除的好方法
- 运行提升for_each中的成员函数向量
- 创建和回推函数向量
- C++,指向函数向量的指针的STL映射