!=的另一种方式
Another way for !=
当我执行我的代码时,我得到作为输出:
错误:控制谓词无效
我知道问题是"!="
有没有关于如何重写 for 循环中的条件以使其运行到我的数组的最后一个元素的想法
typedef pair<double,double> point;
vector<point> smallline;
#pragma omp parallel num_threads(8)
{
#pragma omp for
for (vector< vector<point> >::const_iterator it1 = lines.begin(); it1!= lines.end(); it1++){
smallline = (*it1);
.
.
.
}
}
从 OpenMP 版本 5.0 开始,您还可以将!=
习惯用法用于随机访问迭代器(请参阅 OpenMP 规范,第 96 页)。
早期的OpenMP版本只能并行简单for
。因此,您最好的选择是:
typedef pair<double,double> point;
#pragma omp parallel num_threads(8)
{
#pragma omp for
for (int i = 0; i < lines.size(); i++){
.
.
.
}
}
由于std::vector
被定义为连续存储,并且std::vector::end
将迭代器返回到容器最后一个元素之后的元素。您实际上可以使用<
:
#pragma omp for
for (vector<vector<point>>::const_iterator it1 = lines.begin(); it1 < lines.end(); it1++) {
当然,这不一定适用于其他容器。但是无论如何,您都必须遵守OpenMP的要求,即它必须是随机访问迭代器。
这从 OpenMP 3.0(已有 10 多年的历史)开始工作。
也就是说,有关其余代码的少量信息令人担忧。你不能在循环中做这样的smallline = (*it1);
! 默认情况下,smalline
是共享的,因为它是在paralle
l 构造之外声明的。将此变量移动到parallel
构造内以避免这种情况。小心这样的竞争条件。
相关文章:
- 文本冒险游戏 - 如何区分一种项目类型与另一种项目类型以及如何构建项目类/子类
- 为什么一种算法在相同的时间复杂度下比另一种算法更快?
- 当 c++ 需要一种数据类型并获取另一种数据类型时会发生什么?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- void* 数组将元素转换为另一种类型
- 在C++中使用另一种语言
- 使用typedef作为一种方便替换类名的方式是一种误用吗
- 将 X 坐标从一种分辨率转换为另一种分辨率
- 在 c++ 中将一种结构类型分配给另一种类型
- 如何在一种方法中创建对象并在另一种方法中使用它
- 常量静态成员函数:有另一种方法可用吗?
- 将空基类优化对象强制转换为另一种类型是否会破坏严格的别名?
- !=的另一种方式
- 重载输入/输出运算符,为什么它以这种方式工作而不是以另一种方式工作
- 部分类专门化只是编写完全专门化的另一种方式吗?
- 读取数组2维的另一种方式c++
- 从套接字接收消息的无限循环内ussleep的另一种方式
- 你能把一个异常继承层次结构包装到另一个吗?——或者,另一种干净的处理方式
- 推入堆栈的另一种方式