C++如何将基于范围的for循环重写为普通循环?

标签 c++ openmp

我有一个基于范围的 for 循环,如下所示:

for (auto& individual : population){
    individual.metadata.distance = distance(individual.tour);
}

现在我必须将其重写为普通的 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);
}

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

提前致谢!

最佳答案

auto individual =* (population.begin() + i);

这会生成一个拷贝,但似乎不是您想要的。我想你的意思是:

auto& individual =* (population.begin() + i);

关于C++如何将基于范围的for循环重写为普通循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29222371/

相关文章:

c++ - const char * 和 char *

c++ - 字符串中的最大重复词

c++ - 是什么导致 Eclipse CDT Unresolved inclusion : <iostream>

c - 如何使用不同的线程使用openmp安全地更新C结构

algorithm - 并行化霍夫变换算法的最佳方法是什么?

c++ - 删除多余的并行语句时的不同程序行为

c++ - OpenMP #pragma omp for v/s #pragma omp parallel for之间的区别?

c++ - 在堆栈上创建 QLayout 是否安全?

c - 为什么我在代码中看到不一致之处?

c++ - 从派生调用时编译器找不到基类方法,并且派生定义了具有附加参数的相同命名方法