質問です。XP、.NET です。
STL の deque から、ある条件を満たす要素を全て削除する良い方法はないでしょうか。

// イテレータを使った場合

deque<CHoge> que;
deque<CHoge>::iterator itr;

for(itr=que.begin(); itr!=que.end(); i++) {
 if ( /* 好きな条件 */ )
  que.erase(i);
}

こうすると、erase した時点で i の指すものが不定になり、
i++ が上手く動作しません。

// operator[]() を使った場合

deque<CHoge> que;

for(int i=0; i<que.size(); i++) {
 if ( /* 好きな条件 */ ) {
  deque<CHoge>::iterator itr == ( /* i 番目の要素のイテレータ */ )
  que.erase(i); //
 }
}

operator[] を使ってループを整数でまわそうにも、
n 番目の要素のイテレータを返す操作が見つからず、うまくいきません。

よろしくお願いします。