ssacontents
悪名高き後置きインクリメント演算子(hoge++)を使うシーン †
mapの要素をループの中で削除する場合 †
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の減算カウンタ †
void hoge(int count) {
while(count--) {
... do something;
}
}