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;
  }
}

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-06-07 (火) 20:44:54 (2694d)