2009-06-01から1ヶ月間の記事一覧
コンストラクタの初期化リストの途中で例外が発生した場合、どんな振る舞いになるのか気になったのでためしてみました。 #include <iostream> #include <stdexcept> class Foo { public: explicit Foo(int id, bool bad = false) : id(id) { std::cout << "Foo::Foo(" << id << ")</stdexcept></iostream>…
Leopardはじめました。それから一週間が経ちました。もうすぐ次期バージョンがでるというときにレビューもないので、Leopardを使って感じたことを。 Tigerからアップグレードした直後はこれといって代わり映えしない感じがしたんですが、触っているうちに今…
QuickSortから始まってここまできましたが、なにをしたかったかというと、ダブルディスパッチのエントリで書いたように、「ローコストのスタティックなしくみ」を実現するための試みでした。C++はライブラリでどうにかするタイプの言語なので、モダンな言語…
昨日のエントリの続き。 ソート済み配列が手に入るとマップが作れます。ソートされていなくても線形検索すればいいんですが、それはそれ、効率よく検索したいじゃないですか。ソート済みなら二分探索ができるので、二分探索で実装した定数マップです。 以下…
後から拡張もせず、参照するだけなので定数配列で充分なんだけど、要素はソートされていてほしい…というときのために。 本当はコンパイル時に要素がソートされるといいんですが、思いつかなかったので次善の策として。 2009/06/16 訂正:operator []がconstに…
デストラクタからオーバーライドされた仮想関数が呼べない - imHoリンク先のページにもあるように、C++ではでは構築時には先に派生元が構築され、破棄時には派生元が後に破棄されます。つまり、派生元のコンストラクタ/デストラクタが動いているときは派生先…
目の前の――あるいは長期にわたる経験から学ばない指揮官は、無駄な死がいずれは勝利につながるとでもいうように、やみくもに戦力を投入しつづけるのです はからずしも望まぬ司令官になってしまった主人公の話「彷徨える艦隊」の第2巻での、その主人公のセリ…
周回遅れでiBookにLeopardを入れました。本当はこの秋にでるSnow Leopardまでいまの環境で引っ張りつもりだったんですが、Snow LeopardがPowerPCをサポートしないと知り(手持ちのiBookはPowerPCマシン)、観念してLeopardを購入。丸一日かけてLeopardの環境に…
少し整理。あとポインタだけでなく、イテレータ(ランダムアクセスイテレータ)でも使えるように記述を少し変更。 template<typename T> void swap(T& lhs, T& rhs) { T temp(lhs); lhs = rhs; rhs = temp; } template<typename iterator_t> void qsort(iterator_t begin, iterator_t end) { if(</typename></typename>…
でも、釈然としないのはなぜだろう? template<typename T> void swap(T* lhs, T* rhs) { T temp = *lhs; *lhs = *rhs; *rhs = temp; } template<typename T> void qsort(T* begin, T* end) { if((end - begin) <= 1) return; T* left = begin; T* right = end - 1; T pivot = *right;</typename></typename>…
わけあって、ソートのプログラムを書こうとしたんですが。 あれ、C/C++でどうやって実装するんだっけ?こことか読んで、勉強のしなおしが必要です。 Haskellならやりたいことをそのまま書き連ねるだけなので楽でいいのに…。 qsort [] = [] qsort (a:as) = (qs…
このところ、他のチームのソースコードを入手して、時間があるときに眺めているのですが。「ここのチームのコードはきれいだっ」というのにお目にかかれず。どちらかというと、「なんだこれは?」というコードを目にすることもすくなくなく。だからといって自…