C/C++

std::stringつづき

http://pc2.2ch.net/tech/kako/1045/10457/1045746245.html 293 名前: 284 投稿日: 03/02/27 19:46 >>286 basic_stringからながめてみますた gcc(3.2)はリファレンスカウント。iterator!=pointer stlportはフツーに確保。NUL terminated. vcもフツーに確保…

std::stringのコピーのコスト

今までstd::stringはそれぞれに独立した文字列のバッファを持っていて、 string同士のコピーは自分専用のバッファを確保してそこにコピーするもんだと思ってたけど、どうやら違うらしい。 参照カウントで管理された文字列バッファを別に持っていて、 std::st…

数値演算ライブラリリンク

Blitz++ http://www.oonumerics.org/blitz/ 定番。Fortran並みのパフォーマンスを実現するらしい vecmath c++ http://www.objectclub.jp/download/vecmath1 Javaのjavax.vecmathをC++に移植したものらしい The Matrix Template Library http://www.osl.iu.ed…

boost::numeric::ublas::vector

http://d.hatena.ne.jp/m107/20050528/1117283017 なんか遅いらしい。せっかく今日試してみようと思ってたのにーちょっとublas::vectorのドキュメントを眺めてると、 テンプレート引数にアロケータを渡すようになってて デフォルトではstd::vectorを使うよう…

boost線形代数クラス

http://d.hatena.ne.jp/m107/20050526/ で知った。 http://www.page.sannet.ne.jp/d_takahashi/boost/ublas/index.html クォータニオンクラスがあるのは知ってたけど行列やベクトルクラスがあるのは知らなかった。 自作のベクトルクラスでも不便はしていない…

ソート済みstd::vector

http://d.hatena.ne.jp/toge/20050508に便乗。 連想コンテナをソート済みのstd::vectorに置き換えたほうが効率が良い場合があるというお話。 以前Effective STLを立ち読み(_| ̄|○)した時に気になって試してみたのだけれど、思ったほどパフォーマンスが出…

memcpyは本当に高速か

単純コピーにはmemcpyを使ったほうが速いという話をよく聞くので、真偽を確かめるべく情報を集める。 http://www.cyborg.ne.jp/~xelf/developer/MemoryCopy.html http://d.hatena.ne.jp/kmt-t/20040629#p3 http://beautiful.homelinux.net/~sky-software/dia…

VC++7.1のSTLはクソ?

http://d.hatena.ne.jp/Cryolite/20040717 STL使いまくりストとしては非常に気になる。というかVCのSTLについて良い話しを聞いたことがないのだけれどw 7.1でもSTLがクソなのは相変わらずかぁ。いい加減STLPortに乗り換えようかなあ。 http://www.nantekott…

ハッシュコンテナ

std::stringをキーにしたstd::mapとかをよく使うのだけど、比較・照合のコストが高い文字列の場合、二分木のコンテナだと無駄が多くてよろしくなさそう。 というわけで計算量をほぼO(1)に抑えることが出来るhash_mapやhash_setを使ってみようと思う。標準C++…

コンストラクタ/デストラクタ中での仮想関数の呼び出し

本日の_| ̄|○な失敗。 Luaのラッパクラスを作ろうと思い、LuaStateとそこから派生したLuaThreadというクラスを作った。LuaStateではデストラクタ中で後片付け関数close()を呼び出す。Luaのthreadに対してlua_closeを呼ぶと落ちるのでLuaThreadではこのclose…

Effective C++ 第3版(id:Cryolite:20050413)

キタ━━━(゜∀゜)━( ゜∀)━( ゜)━( )━( )━(゜ )━(∀゜ )━(゜∀゜)━━━!!!!! 超定番本でついにメタプログラミングやBoostについて言及される! 日本語訳出るのはいつだろう。

std:for_each

for(iterator it=list.begin(); it != list.end(); ++it) it->draw();とかしてたのを std::for_each(list.begin(), list.end(), boost::mem_fn(&IDrawBase::draw));としてみる。boost::mem_fnは標準ライブラリのstd::mem_funに相当するもんだけど、std::mem_…

intrusive_ptr

頻繁にインスタンスが生成・解体されるような所にはshared_ptrでなくintrusive_ptrを使うことにしてみる。 intrusive_ptrを使うクラスには参照カウンタと、参照カウンタをage/sage用の関数を定義してやる必要がある。 こんなクラスを定義して、こっから派生…

スマートポインタの負荷

http://boost.cppll.jp/HEAD/libs/smart_ptr/smarttests.htm スマートポインタ性能比較。Special Countedってのがboost::shared_ptrの実装。思ったよりも負荷が大きい。初期化のコストが高いのはいちいち参照カウント用のオブジェクトをnewしているからか。…

windef.hのバカヤローヽ(`Д´)ノ

C++標準ライブラリのstd::numeric_limits<>::maxを使おうとしたところ何故かコンパイルエラーが。 maxの定義を調べていると、windef.h内でこんなマクロが定義されていた。 #define max(a,b) (((a) > (b)) ? (a) : (b)) こいつか・・・こいつのせいでプリプロ…

マイコーディングルール

// メンバ関数の実装部 boost::shared_ptr<CMudamuda> CMudamuda::DoMudamuda(int ora) { // と2行に分けて書いたりする/* /C++ではあまり使わないけど、このように、 * コメント分のアスタリスクの位置をそろえる */C++の場合、一つだけどうしても許せないのが・・・</cmudamuda>…

変数の範囲チェック

ある変数の取れる値を制限したい場合がある。 int x; // xにいろんな処理 // xの値を0 〜 255に制限 if( x > 255 ) x = 255; if x < 0 ) x = 0;いちいち上のようなコードを書くのはくたびれるので、こんなマクロを用意しておくと役立つ #define RANGE_CHECK(…

ループ内でメンバ変数を用いてはいけない件について

C++プログラマーなら常識?なことだけど、漏れはつい最近まで知りませんですた(汗 メンバ変数だけでなくグローバル変数も使わないほうがいいのか。 詳しく解説しているページ http://www.emit.jp/prog/prog_opt0.html