タグ

ブックマーク / www-utheal.phys.s.u-tokyo.ac.jp/~yuasa (1)

  • STLでイテレータのループを組むときの注意 - HongoWiki

    C++で、STLのコンテナを使っていて、イテレータを用いて各要素にアクセスするループを書くときがあります。 要素を削除するメソッド、たとえばerase()やremove()をループの中で使う場合は、ループの終端判定がずれてしまわないように注意が必要で、具体的には毎回、イテレータとend()の比較をあらわに行う必要があります。 たとえば、SpaceWire/RMAP Libraryで、RMAPのTransaction IDのデータベースをmapで実装しているとします。 以下のようなループの記述は、危険です。ループの終端判定が正しく行われず、結果として不正なメモリアクセスを行う可能性があります(普通のOSなら不正メモリアクセスでプログラムが終了する)。 map<unsigned int,unsigned int> tidmap; map.insert(...tidを追加する操作...) map

    uechoco
    uechoco 2014/05/18
    iterator、std::map、erase
  • 1