タグ

ブックマーク / ja.wikibooks.org (4)

  • More C++ Idioms/消去・削除(Erase-Remove) - Wikibooks

    std::remove アルゴリズムはコンテナから要素を取り除かない! 単純に、要素をコンテナの末尾に隔離するだけである。 これは、std::remove アルゴリズムが前方反復子(forward iterator)の対(反復子対(Iterator Pair)イディオム)のみを用いて動作し、一般化された前方反復子のコンセプトは、任意のデータ構造から要素を取り除くする方法を提供しないからである。 コンテナの内部データ構造を知っているのはメンバ関数のみであるため、メンバ関数のみがコンテナから要素を取り除ける。 消去・削除(Erase-Remove)イディオムは、コンテナから実際に要素を取り除くために使用される。 std::remove アルゴリズムは、「削除」された要素群の範囲の先頭を指す反復子を返す。 この時、コンテナの end() 反復子も、サイズも変更されない。 コンテナから実際に要素を

    gin0606
    gin0606 2014/09/01
  • More C++ Idioms - Wikibooks

    C++ はあまりに『熟練者に優しく』なってしまった」(C++ has indeed become too "expert friendly") Stroustrup 氏の言は真実である。なぜなら熟練者は言語のイディオムに深く精通しているからである。プログラマが理解するイディオムの増加に従って、言語は彼あるいは彼女にとってよりフレンドリーになる。この open content book の目的はほどほどに C++ に精通しているプログラマに対して現代的な C++ のイディオムを提示し、C++ をよりずっとフレンドリーに感じるレベルにまで知識を引き上げる助けと成る事である。書は熟練した C++ プログラマが C++ を使ってプログラミングや設計を行う際に用いる事の多い再利用可能なイディオムの網羅的なカタログと成るよう意図されている。これは、それらのテクニックや語彙をひとまとめにしようという

    gin0606
    gin0606 2014/07/09
    出社したら読む
  • More C++ Idioms/仮想コンストラクタ(Virtual Constructor) - Wikibooks

    仮想コンストラクタはオブジェクトの生成に create() メンバ関数を用い、コピー生成に clone() メンバ関数を用いて以下のように書ける。 class Employee { public: virtual ~Employee () = default; // C++組み込みの多態的破棄 [[nodiscard]] virtual auto create () const -> Employee * = 0; // 仮想コンストラクタ(生成) [[nodiscard]] virtual auto clone () const -> Employee * = 0; // 仮想コンストラクタ(コピー) }; class Manager : public Employee // "is-a" 関係 { public: Manager (); // デフォルトコンストラクタ Manager

    gin0606
    gin0606 2014/06/04
  • More C++ Idioms/nullptr - Wikibooks

    C++では、長年にわたり、NULLポインタを指定するキーワードがないという恥ずかしさがありました。 C++11ではその恥ずかしさが解消されました。C++の強力な型チェックにより,CのNULLマクロは式の中ではほとんど役に立たなくなっています。 #define NULL ((void *)0) // 訳註:C++ では定義が異なる std::string * str = NULL; // void * から std::string * へ自動的にキャストすることはできない void (C::*pmf) () = &C::func; if (pmf == NULL) {} // void * からメンバ関数ポインタへ自動的にキャストすることはできない そのため、C++ では整数定数 0 をヌルポインタを指定するために使う。 これは圧倒的多数の場合で思惑どおり動作するが、曖昧なオーバーロード関数

    gin0606
    gin0606 2014/01/10
  • 1