C++ OpenMP通过std::使用迭代器设置
我有一个包含大量线段的网格,我想应用filter和fillC++ 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
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