閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

programming

B-spline

ラグランジュより仕事で使っているものを理解しておいた方が良いかと思うので次は B スプライン補間をしてみます。 B-Spline -- from Wolfram MathWorld 式を見て初めて B スプラインは外挿を行えない理由がわかりました。ただ、ノットベクトルの方がよくわ…

ラグランジュ補間

突然ですがラグランジュ補間をします。式は以下。 が今日はじめて見たので読み方も意味もよくわからないんですが、とりあえず積和すればいいらしいです。式はなんとなくわかったので早速 C++ で実装。手元の本には C での実装も書いてあったんですが、自分で…

参照にしたからといって安全になるわけでもない

C++ の参照は必ず初期化が必要となる (必ず実体がある) ので、参照を取る引数はポインタを取る引数を違って引数が NULL かどうかを判断する必要がありません。……というようなことは色々なところで述べられています。それを理由にアドレスを引数に取る関数は…

C# はオブジェクトの生存期間 (スコープ) を定義できる

あんまり C++ に偏ってもいけないか……ということで。Java は知らないけれど(後で調べる) C# ではオブジェクトの生存期間を定めることができます。つまり RAII idiom は C# でもできたりします。>using System;namespace raii { class hoge : IDisposable { p…

Java や C# のデストラクタ

Java の場合はファイナライザ (Finalize) と言うらしいですが、これらは先ほど紹介したガベージ・コレクションの仕組みからして「いつ呼び出されるかわからない」といった特徴を持っているようです。真面目に使ったこともなかたもんで、こんな基本的なことも…

Boehm GC (を Visual C++ 8 で使用する時のメモ)

早速使ってみましたよ。 A garbage collector for C and C++ から gc6.7.tar.gz をダウンロードして、解凍 お好きな Makefile を使ってビルドします。自分は VC8 を使用したので NT_MAKEFILE を Makefile にリネームして nmake しました さくっとビルド終了……

Garbage Collection のアルゴリズム

一般教養としてのGarbage Collection Garbage Collection のアルゴリズムの説明。ためになります。 Reference Counting 方式しか知らなかったのですが、 Tracing GC の方がよく使われているのですね。また C 言語での GC の実装があることもはじめて知りまし…

std::vector::erase の戻り値

C++ライブラリクイックリファレンス作者: レイリシュナー,Ray Lischner,クイープ出版社/メーカー: オライリージャパン発売日: 2004/07メディア: 単行本購入: 1人 クリック: 6回この商品を含むブログ (8件) を見るISO/IEC に準拠している C++ 標準ライブラリ…

erase-remove idiom

std::remove は実際には要素を削除しないよという話。 remove は第三引数と同じ値の要素をコンテナの末尾に移動して、残った要素の最後の反復子を返すだけなので、コンテナのサイズは変化しない。コンテナから本当に削除したければ erase を組み合わせて使う…

STLport の remove の件

id:wata_d:20060131 にはまる人が出てきた。 STL も割と使われるようになってきているようなので啓蒙しておいた方がいいかもしれない。

pure virtual function call

実行時にエラー (pure virtual function call) が出て死。久しぶりに見たと言うか、こんなエラーが出るはずは無いのだけれど……。基底クラスで純粋仮想関数呼ぶときに失敗するらしいけれど、普段はなんともなくって一度 delete してまた new した直後に出る。…

getArgs

久しぶりに Haskell 。 import System main = do args <- getArgs text <- readFile $ head $ args putStrLn textこれがコンパイルできて、 import System main = do text <- readFile $ head $ getArgs putStrLn textこれがコンパイルできない理由がわから…

std::map をソート

久しぶりに map を使っていて、ふとキーを基にソートしようと思って std::sort に map を突っ込んだりしてしまった orz 。月曜なのでぼけていたということにしておこう……。

619 名前:デフォルトの名無しさん[] 投稿日:2006/04/07(金) 20:23:51 #include struct board { int p; int h; } main() { struct board a = { 0, 0 }; printf("%d,%d,%c", a.p, a.h); return 0; //右この部分に "互換でない型変換(関数 main )" とエラーが…

値を返す関数の戻り値を const 参照で受ける意図って

職場で見かけたソース。 struct st { int value; }; st get_st() { st s; s.value = 100; return s; } int main() { const st& s = get_st(); // これ return 0; } これって何か意味があるんでしょうか? 参照の有無に関わらずコピーコンストラクタ呼ばれてま…

その発想は無かった(-_-)

もらったソースに以下のようなコードがありました。 std::vector arr; for(int i = 0; i 一瞬何しているかわからなかった。着想がすばらしい、と少し思いました。さて、これは、突っ込むべきでしょうか。ていうか STLport の vector には引数を取らない push…

xxxManager はよくない

SomethingManager - Radium Software Development クラスの名称をなんたら Manager とするのは良くない、という話。以前にも似たような趣旨の話を見かけた記憶があるのですが、どこだったか思い出せません。とにかくまあ、前回読んだ時にも気をつけようと思…

std::count 初めて使った

チェックボックスのチェック状態を bool の配列で管理しているのですが、この中でチェックされているものがいくつあるのかを調べるのに使ったりとか。 bool bCheck[20]; // ... size_t nCount = std::count(bCheck, bCheck + 20, true); あんまり出番なさそ…

フォルダ (ディレクトリ) のパスが入ってる文字列の階層を操作したい時は、一旦相対パスにするといい (かも)

たとえば "C:/hoge/foo/bar" みたいな文字列の内容を、 "C:/hoge/foo" にしたい、みたいな。下の階層のフォルダを示す場合は末尾に追加するだけでいいので何も考える必要はないのですが、上の階層に移動するとなるととたんに文字列操作が面倒くさくなります…

なにこのライブラリっ

朝来てからすぐ昨日の問題に取り掛かった。 1 時間かけても解決せずどうしようもなくなったので、他の人が書いたそのライブラリを使ったテストコードソースを隅々まで眺めて調べるも、やっぱりおかしな点は見つからない。デバッガで関数に渡す引数を全て調べ…

構造体のメンバをインデックスから取得する

#include using namespace std; struct container { double a; double b; double c; // ほんとはもっといっぱいあるの... } data; int main() { data.a = 1, data.b = 2, data.c = 3; for(int i = 0; i 構造体のメンバは同じ型で且つ POD じゃなきゃ駄目、だ…

perl で YAML

Ruby がだめなら *1 Perl を使えばいいじゃない、ということで、無駄にカテゴリ増量中。 perl で YAML を扱うには専用のモジュールが必要になるのでインストール。 cygwin でも cpan コンソールとやらが使えるらしいのでそれを使う。 cpan cpan> install YAM…

素の C++ でも括弧で括れば型を指定しなくてもメソッドが呼べる

std::string a = "Hello ", b = "World."; std::cout "Hello World." 別に CLI とか関係なかった。

YAML

YAML でドキュメント書いて Excel に変換したらうまーかも、という妄想 とりあえず YAML っぽい形式でなんか書けたので Ruby の WIN32OLE から Excel に転送してみよう 転送された文字が物凄い勢いで化けて死 utf8 で書かれた .yaml の内容をそのまま転送し…

type system unification

どうやら C# ではリテラルもオブジェクトになっているみたいですね。 C++/CLI でも一応そうなっているようです。 Console::WriteLine( (1).GetType()); // > System::Int32 Console::WriteLine( (1.23).GetType()); // > System::Double Console::WriteLine(…

Ruby はすべてがオブジェクト

なので、基本型どころかリテラルにもメソッドがあります。 100.to_s # => "100" なんてこともできます。 Visual Studio 2005 な言語は多分以下のようにしないと通らない。 //Console::WriteLine(100.ToString()); // C++/CLI では compile error Console::Wr…

単位には気をつけよう……

C++ Builder にとある ActiveX コントロール (OCX) を組み込んでプログラムを書いていて、途中までは順調だったのですが、コントロールをオーナードローにして自前で描画イベント拾って描画しようとした時に少しはまりました。 C++ Builder ではドローイベン…

C++ で delegate

でっちあげてみた。 id:wata_d:20060309:1141873430 と同じ事を C++ で。 #include #include template class Delegater { std::vector > func_; public: Delegater() {} template Delegater(const U& f) { func_.push_back(f); } template Delegater& operat…

tracking reference handle

int main(array ^args) { int src = 100; Console::WriteLine(src); int% tracking = src; // tracking reference handle tracking = 200; Console::WriteLine(src); return 0; } 実行結果: 100 200 参照と同じようなものだという認識でいいのかな。 * -> ^ …

delegate

public delegate void print(); void hoge_print() { Console::WriteLine("hoge"); } void hige_print() { Console::WriteLine("hige"); } int main(array ^args) { { print^ p = gcnew print(&hoge_print); p += gcnew print(&hige_print); // ! p->Invoke(…