2004-07-16から1日間の記事一覧

っていうかアルゴリズム周りはまだまだ最適化の余地ありますね・・・

traitsが標準化されれば,ここら辺での劇的な改善があると思うんですがどうなんでしょうか?ちなみに,vector::iterator + copyがmemmoveにdispatchされていると信じていたんですが,されてなくて超(´・ω・`)ショボーン

iterator範囲によるコンストラクタ

std::vector v(data, data + sz); PODに対して(というか,PODに限らずポインタとサイズが与えられたときにvectorを初期化する手段として)最善となるコードです.上のコードによって具体的に何がなされるかはおおよそ以下のとおりです. 引数のiteratorの差(…

resize + memcpy

std::vector v; v.resize(sz); memcpy(&v[0], data, data + sz); まず最初に1点.&v[0]のようにvectorの内部バッファを連続した配列とみなした上でCAPIに突っ込むのは標準で保証された安全な操作です.(ISO/IEC 14882-2003 23.2.4 -1-が論拠になります.後…

reserve + push_back

std::vector v; v.reserve(sz); for(int i = 0; i 通常,for文による明示的なループによる代入とmemcpyとの比較では圧倒的に後者に軍配が上がります.これはmemcpyが実装上の最適化を許されているからです.(確かCに関する本でこのmemcpyに関して論じていた…

std::vectorをPODの一時バッファとして使う

C++

>>d金魚さん(で良いのかな?名前間違っていたら本当にすいません) そのTest_VectorSpeedの実装だとvbの前1MBに0が詰まった後,後ろ1MBにdataが詰まると思います.なので,多分1回ぐらいvectorの内部バッファの再配置(とそれに伴うdelete & new)が起きる…