C++如何将基于循环的范围重写为正常范围?

for*_*eqn 2 c++ openmp

我有一个基于这样的循环范围:

for (auto& individual : population){
    individual.metadata.distance = distance(individual.tour);
}
Run Code Online (Sandbox Code Playgroud)

现在我必须将其重写为正常的for循环以便使用OpenMP来并行化我的程序,我有以下内容:

int length = population.size();
#pragma omp parallel for
for (int i = 0; i < length; i++){
    auto individual =* (population.begin() + i);
    individual.metadata.distance = distance(individual.tour);
}
Run Code Online (Sandbox Code Playgroud)

但是,输出变得不正确,所以我想知道这是否是重写基于for循环的范围的方法.有没有人有任何想法?

提前致谢!

Moo*_*uck 5

auto individual =* (population.begin() + i);
Run Code Online (Sandbox Code Playgroud)

这会产生一个副本,看起来不是你想要的.我想你的意思是:

auto& individual =* (population.begin() + i);
Run Code Online (Sandbox Code Playgroud)