[[ssacontents]] ** 悪名高き後置きインクリメント演算子(hoge++)を使うシーン [#c4e7b54d] *** mapの要素をループの中で削除する場合 [#ae33235f] map<int,int> intMap; ... map<int,int>::iterator ite = intMap.begin(); // map<int,int>::terator end = intMap.end(); // while (ite != end) // ↑のようにendをあらかじめ評価してはいけない while (ite != intMap.end()) { ... if (削除する?) { intMap.erase(ite++); // 内部では、 { iterator tmp = ite; ++ite; erase(tmp); } の動作になる } else { ++ite; } } - iteratorのルール -- iteratorは、insert, eraseなどコンテナのサイズに影響を与える操作をした場合、その値は無効になる。無効なiteratorへアクセスした場合の動作は「未定義」となる。 -- たとえば、ループの中で要素を削除したり、追加したりする場合。要注意。 *** integerの減算カウンタ [#q17515ea] void hoge(int count) { while(count--) { ... do something; } }