stlに関するpknightのブックマーク (6)

  • STLプログラミング・メモ

    [ C++で開発 ] STLプログラミング・ノート STLを使いこなすためのノートです。STLは機能豊富で汎用的なライブラリ集ですが、使いこなすには難易度が少々高いので、あらかじめ勉強が欠かせません コンテナの要素にポインタを入れたい ポリモーフィズムを活用するためのコンテナ格納法 オブジェクト指向プログラマーがぶつかるSTLの壁の1つです。 オブジェクト指向プログラミングをする以上、アプリケーションプログラムを書く際にはクラスをいくつも定義します。ポリモーフィズムを活用するため継承を使います。しかし、STLのコンテナにオブジェクトを入れようとして、はたと悩みます。世の中のSTLのサンプルは、コンテナに値をコピーで格納します。コピーだと、ポリモーフィズムが使えません。困った・・・ ポインタをコンテナの要素に そこで、苦肉の策としてコンテナにポインタを格納することにします。 #include

  • クラスをSTLコンテナにいれると恐ろしい事が起こるぞ! - 神様なんて信じない僕らのために

    C++に慣れている人にとっては考えもつかないことですが、 クラスをコンテナにいれる、ということを試したくなる時期があります。 コンテナにクラスのポインタをいれるとポインタ管理が面倒だし、 クラスの実体をいれておいたら便利じゃない? というのがその発端です。 さて、クラスはコンテナにいれてもいいものなんでしょうか? じゃ、やってみましょう! C++ code - 32 lines - codepad 予想と違う結果がでたぞ!!! と思いませんか? なぜデストラクタが呼ばれる回数が想定より多いのでしょう? そして、コンストラクタの呼び出される回数とデストラクタの呼び出される回数が一致していません。 むむ? 訓練されたC++はここであることに気付きます。 「vectorが拡張されている時に恐ろしいことが起きているのではないか?」 では、やってみましょう。 拡張されないようにreserveです。

    クラスをSTLコンテナにいれると恐ろしい事が起こるぞ! - 神様なんて信じない僕らのために
  • C++: 構造体を格納したSTLコンテナに対してソート・探索・削除などのアルゴリズムを適用する

    C++に慣れている人にとっては当たり前のことかもしれないけど、あまりC++に親しんでいない場合、構造体を格納したSTLコンテナに対してアルゴリズム<algorithm>を有効に活用していないかもしれない。そこで、構造体を格納したvectorなどのSTLコンテナでソートや探索、削除などのアルゴリズムの利用方法を書いておく。 struct A { int n; int* p; }; 上記のような構造体はよく見かける形だと思う。構造体Aに整数型変数のnとポインタ型変数のpがあり、例えばnに配列の要素数、pにその配列を確保したりする。こういった構造体を以下のようにvectorなどのSTLコンテナを使って格納することは多々ある。 vector<A> A_list; これで構造体Aをコンテナに格納できるわけだ。ところで、STLコンテナを使用する一つの理由として便利なアルゴリズムが利用できることが挙げら

  • std::vectorはダメだという人間に限ってstd::vectorより劣ったものしか書けない - 神様なんて信じない僕らのために

    なんとなく考えること。 「可変長配列」を使っていて、 std::vector(の動作)はダメ、とか自前で書いた方が良い、なんてことをいう人がいるんだけれど、 std::vector以上のものを書くことができるのか? そういうとき、その人は文句は言えるがstd::vectorより優れたものなんてかけはしないのだ。 ただ、自分が思い通りにvectorを使えないので文句を言っているだけだ。 オープンではありませんが、 ゲーム向けにEASTLというものがあります。 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html 例えばこれを、例えばfixed_vectorだけでも良いので 実装して、といったときどれだけの人が実装できるのか? 文句を言うなら、それ以上のものを出さなければならない。 結局STLより良い物を持ってこら

    std::vectorはダメだという人間に限ってstd::vectorより劣ったものしか書けない - 神様なんて信じない僕らのために
  • STL <vector>

    2003/6/7 細かな修正 vectorは添え字やイテレータが正しい位置を指しているかどうかはチェックしません。 安全な配列というわけではないのです。 目次 テンプレート コンストラクタ等 vector(), ~vector() operator =() assign() イテレータ begin(), end() rbegin(), rend() サイズ size(), max_size(), capacity(), empty() resize(), reserve() 要素の参照 operator [](), at() front(), back() push, pop push_back(), pop_back() 挿入 insert() 削除 erase() clear() その他 swap() 非メンバ operator==(), operator<() operator!=

  • STL - ゲームが作れるようになるまでがんばる日記

    を読んで、STLについて学んだ。とりあえず自分が使いそうなvectorやlistなどを覚えた。なんでもっと早くから勉強しておかなかったのだろう。いちいち自分でリストを作ったりしていた。もちろん、リスト自体について知っておくことは必要だが、毎度同じような実装を行っていたのはただの無駄だった。こんなに便利で強力なものがあったのに使っていなかったなんて。 まあ、いまどきSTLすげーなんて言っていること自体が遅くて、すでにBoostがある。さらにJavaやC#には強力なクラスライブラリがあるというのに。 C++の勉強していて思ったのだが、たとえばハッシュや二分木などといったアルゴリズムやデータ構造についての知識が足りないことを実感した。これからはこちらの勉強もしないと。

    STL - ゲームが作れるようになるまでがんばる日記
  • 1