我有一个包含大量细分的网格,我想应用过滤器并填充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/

10-13 06:51