eraseを使う
ベクタ配列の要素を削除するにはeraseを使います。eraseの引数にはイテレータというものを渡します。僕の理解ではイテレータは配列の要素を指すポインタのようなものです。
・参考
Programming Place Plus
code
vector<int>num; vector<int>::iterator itr = num.begin(); //数字をセット for (int i = 0; i < 10; i++) { num.push_back(i); } for (itr = num.begin(); itr != num.end();++itr) { //偶数だけ削除 if ((*itr) % 2 == 0) { //有効なイテレータをセット itr = num.erase(itr); } } for (int i = 0; i < num.size(); i++) { cout << num[i] << endl; }
実行結果
1
3
5
7
9
前置インクリメントと後置インクリメント違い
前置インクリメントは直接インスタンスの値を増加させて、値を返します。一方、後置インクリメントは一度インスタンスをコピーしてから増加させて、そのインスタンスを返します。後置インクリメントのほうがコピーする手間があるので、前置インクリメントが推奨されているみたいです。難しい!
・参考
C++で後置インクリメントよりも前置インクリメントが多用される理由 - 考える人、コードを書く人
http://homepage2.nifty.com/well/Operator.html#POST_INCREMENT