タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

c++とSTLに関するuechocoのブックマーク (4)

  • [C++] STLの型の使い分け - Qiita

    先日Ohotech 特盛 #10で話した、「C++のSTLのコンテナ型を概観する」の内容を単独記事としてまとめたものです。 追記(2019.02.02) 記事から大幅加筆し動画講座化したものを公開しました。 C++ STLのコンテナ型を動作効率を考えて使いこなす! | Udemy 有料ですが、一部の節は無料で視聴可能です。 2月いっぱいまでは、上記のリンクから辿っていただけると有効のキャンペーン価格になります。なお、もしキャンペーン価格(¥3600→¥1200)が表示されていない場合はお問い合わせください(offkaiあっとまーくhhiro.net)。 追記(2014.10.22) 10月18日の札幌C++勉強会にて、この記事のダイジェスト版を発表しました。 なぜこの記事のような考え方が必要なのか、という紹介です。 STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7

    [C++] STLの型の使い分け - Qiita
    uechoco
    uechoco 2015/06/03
    unordered_map、unordered_set、map、set、list、vector、deque、比較
  • std::map - erase 時の iterator の無効化を防ぐ - yanaken@phper

    std::map を使用していると、 「ある条件を満たし(た|てない)要素を削除したい」 ってことがよくある。 そんな時はこんな感じにしてみる。 std::map<int, bool> hige; std::map<int, bool>::iterator it = hige.begin(); while (it != hige.end()) { if (it->second == true) { // ここがポイント hige.erase(it++); } else { ++it; } } [説明] std::map は要素を変更した場合に、以前まで保持していた iterator は無効になってしまう。 erase の戻り値も void なので何も期待できない。 だったら erase に渡す前の iterator を保持しちゃう。 std::map<int, bool>::iterato

    std::map - erase 時の iterator の無効化を防ぐ - yanaken@phper
    uechoco
    uechoco 2014/05/18
    std::map、erase
  • 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
  • その12 イテレート中のSTLのlistから要素を安全に削除する方法

    ホーム < ゲームつくろー! < Programming TIPs編 その12 イテレート中のSTLのlistから要素を安全に削除する方法 STLのコンテナは「イテレータ」によって要素を取り出します。この時良くあるのが「ある要素をチェックして、必要が無くなった場合はリストから削除する」という作業です。例えば描画オブジェクトのリストからもういらなくなったオブジェクトを除く時などこの作業が必要になります。 イテレート中のリストから要素を除く場合、ちょっと注意しないと思わぬバグが誘発します。この章ではイテレート中のリストから要素を除く方法をまとめます。まさにTIPsです(^-^;。 ① まともにやるとあっさりバグ 例として、int型のリストに0~9までの要素がこの順番で登録されているとしましょう。このリストをイテレートして「5」を取り除きたいとして、次のようなコードを書きました:

    uechoco
    uechoco 2014/05/18
    iterator、std::vector、std::deque、std::list、erase
  • 1