Для перебора элементов контейнера я обычно использую итератор, например:
container<type> myContainer;
// fill up the container
container<type>::iterator it;
for(it=myContainer.begin(); it!=myContainer.end(); ++it) {
//do stuff to the elements of the container
}
Теперь, если я хочу распараллелить цикл с помощью OpenMP, я могу попробовать что-то вроде:
container<type> myContainer;
// fill up the container
container<type>::iterator it, it_begin=myContainer.begin(), it_end=myContainer.end();
#pragma omp parallel for default(none) private(it) shared(it_begin, it_end)
for(it=it_begin; it!=it_end; ++it) {
//do stuff to the elements of the container
}
Однако, когда я запускаю указанный код, изменения не вносятся в контейнер. Однако если я использую для контейнера обычное индексирование, параллельный код работает нормально. Мне интересно, можно ли использовать итераторы в контексте OpenMP или мне нужно преобразовать повторяющийся цикл в индексированный цикл?