Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenMP通过std::使用迭代器设置_C++_Multithreading_Parallel Processing_Openmp_Stdset - Fatal编程技术网

C++ OpenMP通过std::使用迭代器设置

C++ OpenMP通过std::使用迭代器设置,c++,multithreading,parallel-processing,openmp,stdset,C++,Multithreading,Parallel Processing,Openmp,Stdset,我有一个包含大量线段的网格,我想应用filter和fillstd::set_uu,它是类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(m

我有一个包含大量线段的网格,我想应用filter和fill
std::set_uu
,它是类
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_);
    }
}
fill_set()
{
对于(mesh::SegIterator it=A.beginSeg();it!=A.endSeg();++it)
{
网格::段Seg_uz=*it;
int-SignP=0;
int-SignN=0;
对于(mesh::PointIterator itp=Seg_u2;.beginPoint();itp!=Seg_2;u2;.endPoint();++itp)
{
双旧双新;
... 
...
如果(旧的>0.0和新的>0.0)
SignP++;
如果(旧的<0.0和新的<0.0)
sign++;
}
if((SignP==1&&SignN==1)| |(SignP==1&&SignN==2))
{
设置插入(分段);
}
}


我正在尝试使用OpenMP和C++03并行生成上面的代码。我看到了一些解决方案,如。还有其他安全整洁的解决方案吗?

尝试从
it!=A.endSeg()
更改为
it
!=
的问题是循环不可计数。编译器无法确定循环是否会结束。请将其切换到
尝试从
it!=A.endSeg()
更改为
it
!=
的问题是循环不可计数。编译器无法确定循环是否会结束。请将其切换到
尝试从
it!=A.endSeg()
更改为
it
!=
的问题是循环不可计数。编译器无法确定循环是否会结束。请将其切换到
尝试从
it!=A.endSeg()
更改为
it
!=
的问题是循环不可计数。编译器无法确定循环是否会结束。将其切换到
是mesh::SegIterator一个随机访问迭代器,或者只是一个双向迭代器(甚至只是一个前向迭代器)?我不明白为什么不能使用相同的技术。为每个线程编写私有集,并在关键部分使用
insert
合并它们。mesh::SegIterator是RandomAccessIterator还是仅仅是双向Iterator(甚至仅仅是ForwardIterator)?我不明白为什么不能使用相同的技术。为每个线程编写私有集,并在关键部分使用
insert
合并它们。mesh::SegIterator是RandomAccessIterator还是仅仅是双向Iterator(甚至仅仅是ForwardIterator)?我不明白为什么不能使用相同的技术。为每个线程编写私有集,并在关键部分使用
insert
合并它们。mesh::SegIterator是RandomAccessIterator还是仅仅是双向Iterator(甚至仅仅是ForwardIterator)?我不明白为什么不能使用相同的技术。为每个线程编写私有集,并将它们与关键部分中的
insert
合并。您还需要围绕
集插入(Seg)的关键部分;
line,因为std容器无法异步调整大小。捕捉得好。@guyGreeryYou还需要一个围绕
set.insert(Seg_)的关键部分;
line,因为std容器无法异步调整大小。捕捉得好。@guyGreeryYou还需要一个围绕
set.insert(Seg_)的关键部分
行,因为无法异步调整std容器的大小。捕捉得好。@GuyGreer您还需要在
集合插入(Seg);
行周围设置一个关键部分,因为无法异步调整std容器的大小。捕捉得好。@GuyGreer