我有一个包含大量细分的网格,我想应用过滤器并填充std::set set_
,它是类A
的私有成员。有一个称为fill_vec()
的函数,它将使用for
循环填充矢量:
fill_set()
{
for(mesh::SegIterator it = A.beginSeg(); it != A.endSeg(); ++it )
{
mesh::Segment Seg_ = *it;
int SignP = 0;
int SignN = 0;
for(mesh::PointIterator itp = Seg_.beginPoint(); itp != Seg_.endPoint(); ++itp )
{
double old_, new_;
...
...
if( old_ > 0.0 && new_ > 0.0 )
SignP++;
if( old_ < 0.0 && new_ < 0.0 )
SignN++;
}
if( (SignP == 1 && SignN == 1) || (SignP == 1 && SignN == 2) )
{
set_.insert(Seg_);
}
}
我正在尝试使用OpenMP和C ++ 03并行执行上述代码。我看到了像this这样的解决方案。还有其他安全整洁的解决方案吗?
最佳答案
尝试从it != A.endSeg()
更改为it < A.endSeg()
。 !=
的问题是循环不可数。编译器无法确定循环将永远结束。将其切换为<
应该可以计数。
关于c++ - 使用迭代器通过std::set实现OpenMP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31983173/