2006-01-01から1年間の記事一覧

pimplイディオム

いままで,pimple(ニキビ)イディオムだと思ってたけど, class FooImpl; class Foo { private: FooImpl* pImpl; (略) }; のpImplか来ていたのか.ニキビって…

連想コンテナ(7)

現時点でのコード.連想コンテナ(2)と対して変わらないような.

連想コンテナ(3)

同じkeyを持っているデータを登録した場合に,前のデータを上書きしたいんだけど,それだと前のデータを削除するやつがいない.かといっていちいち前のデータがあるか確認して削除,その後に挿入となるとvectorなのでコストが掛かってしまう.ということで削…

連想コンテナ(4)

dataをポインタではなく実体で受け取る場合,参照渡しのほうがいいのではないか?また,keyもbool operator()(const Item& i, const KeyType& k)のKeyType&ように常に参照渡しになっている部分があるが,デフォルトのintの場合は値で受け取り,int以外の場合…

連想コンテナ(5)

コンテナにオブジェクトの実体を入れる場合,Insertに参照渡しをしても,insertでもpush_backでもコピーコンストラクタが3回呼ばれる. v.insert( it, Item(key, data)); // 1.Item(key, data)で作成, insertが _Insert_n(_Where, (size_type)1, _Val); を…

段落の並び

1日に何個も書くと,左の最新タイトルがおかしくなるので,無理に逆順に書いてみたが,それはそれで問題があるような.どうしたものか.

連想コンテナ(6)

そろそろ正しい実装を探そうかと調べてみたけど見つからない.Sorted Array Map, Associative Sequenceが似たようなコンセプトらしいということだけは判った.検索能力低し…dataに対する削除処理はつけたが,keyに対しても削除処理が必要なのだろうか?自分…

連想コンテナ(1)

struct XxxData { int id; // データ類 }; int Xxx::getIndex( int id) { int i = 0; for( std::vector::iterator it = xxxDataSet.begin(); it!=xxxDataSet.end(); ++it,++i) { if ((*it).id==id) return i; } return -1; } のように,構造体の中にidを入れ…

連想コンテナ(2)

超適当なバージョンを作成してみる.

STLの勉強

typedef std::pair Item; typedef std::vector List; typedef typename List::iterator iterator; List v; void DoAll( void (*pFunc)(DataType&)) { for( iterator it = v.begin(); it!=v.end(); ++it) { pFunc( it->second); } } こんな関数があったらいま…

時間切れ

ソースコード中に「// TODO: 〜〜する」とか「// MEMO: 〜の処理は〜するべきか?」とか書き散らかしてとりあえず作業や決定を後回しにする方なのだが,REMINDER( 20061201, "TODO:〜〜する");と書いたら,12月1日以降はコンパイルエラーが出るように出来た…

export

今頃になってvc8にexportキーワードが実装されていないことに気づいた. id:iken0:20060915に書いたようにtemplateを全然使いこなしてないからなー.それにしてもtemplateの使い方がいまいち判らないな.何か教科書を探して読まないと.

テスト

思いつきで機能を追加実装しながら,平行して思いつきで最適化を掛けてるから,動いていたと思ったコードがいつのまにか動かなくなってたりして危険.しかも,一見動いているように見えて挙動がおかしかったり…a++;を実装して動作チェックもしたのに,a=6;a-…

テンプレート

整数型と浮動小数点型の計算でテンプレートを使ってみた.コンテナとかイテレータとかは使ってたけれど,自分でテンプレートを使うのは初めてだ. template <typename T> static Expression *calcArithmeticSub( OP_CODE op, T vl, T vr) { Expression *ret = NULL; swit</typename>…

偽lisp

パース部分がc++のソースなのに,微妙にlispっぽくなってかっこいい.ソース中では Expression *lhs = CreateIntLiteral(1); ret = AddBiInst( rhs, Compose( op, lhs)); ret = AddBiInst( ret, CreateOp2( codeStore, type, index));みたいなコードになって…

速度の確認2

ようやくローカル変数を実装. 例のベンチでフィボナッチ数列を計算させてみる. 最初,fib(33)を求めるのに50秒以上掛かり,目の前が少し暗くなった.Debugビルドのままチェックしていた所為だと気づき,Releaseビルドをビルドしなおしてチェック.時間は3.…

速度を確認

速度を確認できるものをとりあえず作ってみた. ttp://ishi.blog2.fc2.com/blog-entry-192.html にあった簡単なベンチを参考にするべく,最初の単純なループのやつだけを実行できるだけのもの.ローカル変数は未実装なので,フィボナッチ数列を求めるやつは…

ありがちなこと

0[bB][0-1][0-1_]*を定義してみる._も使えるのはrubyのパクリ.x = 0b1111_1010_0000;とか.使い道が思いつかないが.

スクリプト言語

日本語でググってみても,cライクなスクリプト言語でバイトコードを吐き出して,仮想マシンで実行ってやつはポロポロと出てくるな.英語でも検索したら,どれだけ出てくるんだろうか.id:iken0:20060903のflexのpragmaの件は,自分の書いたソースとflexの吐…

flex

-Sオプションでスケルトンファイルを指定できるらしいが,MANPAGEには普通は使わないとか書いてある.バイナリを落としたのと同じところからソースも落としてみたら,skel.cっていうそのままんなファイルの中に文字列データとして,雛形と思われるものがある…

bison,flexをvc8で使う

真面目にソースからコンパイルしようとしたものの,VC8ではコンパイルが上手く通せず泣けてきたのでProject GnuWin32 (via flex / bison はじめて8時間以内FAQ)から,bisonとflexをダウンロードする.(別の環境のVC6ではそこそこ簡単にコンパイルできた…)bis…