2011-06-07 96 views
1
#pragma omp parallel for reduction(+ : numOfVecs) 
for(itc=clus.begin() ; itc!=clus.end() ; itc++) 
{ 
    numOfVecs += (*itc)->getNumOfVecs(); 

} 

我有几个代码,就像上面的代码一样,我需要循环中的迭代器。但是我得到错误'无效控制谓词'。有什么办法可以解决这个问题吗?OpenMP - For-loop中的迭代器

在此先感谢


顺便说一句,我使用的代码::块和MinGW的最新版本。我是新手,但我认为他们在-fopenmp之后默认支持openmp3.0。我正在使用的迭代器是列表迭代器。

+1

问题是,当前的OpenMP规范不允许运算符“!=”。英特尔编译器目前确实允许“!=”,所以有一个例子可以实现。在未来的OpenMP规范中,它很可能会发生变化。在此之前,您将被限制为<, <=, >,并且> =作为您可以使用的关系运算符。 – ejd 2011-06-08 01:07:20

回答

1

std::list<T>::iterator是一个双向迭代器。 Afaik,openmp3并行for循环仅适用于随机访问迭代器(并且没有!=,如ejd所述)。也许你可以用std::vector代替。