C++
圧縮検索で使われる技術wavelet treeをテンプレートライブラリとして書いてみました。 →を参考にしてみました。高速かつ省メモリで文字列を扱うデータ構造「wavelet tree」 元となる記事が大変興味深かったのだけど、どうもサンプルコードが複雑すぎるのと、…
C++で何らかの型を定義して、その型を文字列に変換したいとき、演算子" class Hoge{ public: //たとえば配列のような型だったとする size_t size()const{/*略*/} int operator[](size_t i)const{/*略*/} /*略*/ }; Hoge hoge; std::cout << hoge << std::end…
デザインパターンってあるけれど、これは設計というより、内部の関数、構造体どうしのインターフェースのノウハウ・・・パターンだと考えられるんじゃないかと思う。 プログラムは大きく3つの要素・・・構造・アルゴリズム・インターフェースによって構築さ…
MemoryPoolという構造体がある。これは一種のアロケータで、あるサイズ分メモリーをブロックとして確保しておき、それをためて置く。これを必要になったときそれを使用する。Effecient C++にはそんな構造体が載っている。 いくつかの不具合を修正したので、…
オブジェクト指向言語であるC++においてクラスは基礎的な部品であり、論理構造を抽象化し、ソースコードの見通しを良くしてくれる。 クラスは他の関数ないしクラスのメンバ関数において、実装として局所的に使われるケースがあっても良い。なにもクラスは「…
compositeパターンは複数のものを単数扱いして複雑な構造への処理を容易に行なえるようにするものだ。この適用範囲は思いのほか広い。これには、『複数のものを単数扱い』というより『単数の出力を複数の出力』とみなすとした方が分かりやすいかもしれない。
例外に対し安全なコードを書く基本 ClassA * p_ClassA = new ClassA(); 【何か】 delete p_ClassA;としてはいけない。
static変数は怖い。摩訶不思議。 const char* func(){ static std::string s; s = GetHoge(); return s.c_str(); }を const char* func(){ static std::string s = GetHoge(); return s.c_str(); }にすると期待どうりに動かないだろう。2/24 返り値の型まち…
実装をヘッダファイルに書かないためにそのすべてのメンバを実装したクラスへのポインタのみをメンバにもつことをpimpl*1イディオムと呼ぶ。2/24 パターン→イディオム *1:Pointer of IMPLement
ロガーとはログを書き出す仕組みのこと。 C++を使っているのであれば、多態を使って柔軟なロガーを作ることができる。
3Dプログラミングにおいて三角形(ポリゴン)の交差判定は重要である。このルーチンの品質・速度は全体のパフォーマンスに大きく影響する。 三角形の交差判定でよく使われるのが以下の手法だと思う。 よく教科書に載っている手法(平面に交差→三角形の内部判…
小さな算術クラスは値返ししようというお話。 以前(といっても1年半以上前だが)僕はconst参照を使ってET(Expression Template)を実装しようと試みたことがある。 const参照ならコピーのコストが無いので、これがさらに最適化すればETが実装できるはずだと…
copy_n()という関数は標準にはない*1。fill_nはあるのに。なんでないのか?その理由は良くわかってない。 copy_nの存在価値はあるか?あるとしたら最適化の考慮のためだろう。 copy_nは条件次第で最適化により高速な関数memmoveまたはmemcpyに置き換える。 …