gpt4 book ai didi

c++ - 将包含数组的结构推送到 vector 中

转载 作者:行者123 更新时间:2023-11-28 00:00:54 25 4
gpt4 key购买 nike

<分区>

我正在编写一个执行差异进化的程序。有一次,我正在将我的解决方案分类到解决方案文件中,并遇到了这个问题。我的存档是一个结构 vector :

std::vector<SingleSolution> archive;

typedef struct SingleSolution
{
int *crop_area;
int *envf;
double nr_cost;
int env_cost;
int front;
int feasible;
} SingleSolution;

当我进行排序并有一个解决方案要放入我的存档时,我正在创建一个 SingleSolution 并将其推送到存档:

SingleSolution member;
member.crop_area = (int *)calloc(crops + 1, sizeof(int));
member.envf = (int *)calloc(M + 1, sizeof(int));
member.front = 1;
member.feasible = feasible[member1];
member.nr_cost = nr_costs[member1];
member.env_cost = env_costs[member1];
for (int n = 1; n <= crops; n++) member.crop_area[n] = solution_crop[member1][n];
for (int n = 1; n <= M; n++) member.envf[n] = solution_env[member1][n];

archive.push_back(member);
//free(member.crop_area);
//free(member.envf);

我在推送到 vector 后释放了这些数组,因为我认为它复制了我推送的内容,但在打印存档时我看到了明显的垃圾值并意识到了原因。如您所见,我已将其注释掉。所以我的问题是,那个 push_back 到底发生了什么?它插入数组开始的内存位置,然后我释放那个空间?有什么方法可以克服这个问题,还是我需要在主函数中创建空间并在调用排序函数时传递它,然后在完成时释放它?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com