C++イテレータ+OpenMPのforループにハマる

C++のベクトル型の変数に対し,#pragma文でOpenMPの並列化をさせようとすると,うまくいきませんでした.

#include<vector>
int main()
{
  vector<int> a(10);
  vector<int>::iterator i;
  int j;
#pragma omp parallel for
  for(i=a.begin(),j=0;i!=a.end();++i,++j)
  {
    *i = j;
  }
}

エラーは,

  error: OpenMP for-test does not conform

まぁ,よくよく考えれば分かることで...ループ回数が事前に分からないと,OpenMPはループ回数を分割して並列処理に持ち込むことが出来ない訳です.「i!=a.end()」だとwhile文的で,あらかじめループ回数が分からない,と.
なので,次のようにループ回数が分かるようにしてあげなければなりません.

#include<vector>
int main()
{
  vector<int> a(10);
  int j;
#pragma omp parallel for
  for(j=0;j<a.size();++j)
  {
    a.at(j) = j;
  }
}

素直にイテレータが使えないのは残念に思えますが,添え字を表す変数と併記することで,なんとかOpenMPに持っていくことは可能です.