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



トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS