C++
以下の例は昔のバージョンです。最新版は github に置いてみました。 github.com 実験で、全組合せに対して繰り返し処理をしたい時に使う。 先に使用例。 C++11 以降で使える range-based-for 文を使っているので、 gcc なら -std=c++11 (or -std=c++0x) が…
参考文献 https://sites.google.com/site/cpprefjp/reference/algorithm/for_each c++ - Why is std::for_each a non-modifying sequence operation? - Stack Overflow 要するに for_each は、 "non-modifying sequence operation" (シーケンスを変更しない…
反復計算などで、前回の値を利用して、新しい値を逐次的に計算するプログラムについて。 例として、平方根の計算を考えると、 を、 x_0=1 の初期値 (なんでもいいけど) から順に計算していけばいい。プログラムでは、途中の値を残す必要はないので、順次上書…
いつもどこに書かれているかわからなくなるので、メモ。 35.12 Why can't I separate the definition of my templates class from its declaration and put it inside a .cpp file? 関数やクラスのテンプレートは、常に使われるソースといっしょに置いておか…
規格では 5.3.4 の 5 で、 int * a = new int [100] (); のように最後に括弧をつけることによって、 int 等の型でも value-initialized されることが規定されている。しかし、なぜか配列の new は初期化できないという説明がちまたであふれかえっている。ど…
捨てコードだと、画像の画素値を格納した変数として、 int I[2000][1000] = { {0} }; なんてやっちゃうよね。んで、サイズが大きいとメモリがスタックに確保できないで、セグフォが出ちゃう。 しょうがないから、初心に帰って、 int* I = new int[2000*1000]…
C++ には、 STL の algorithm に各要素に一括で関数を適用する for_each と transform があるのだが*1、 C# にはなさげ。こういうときは、 LINQ を使って、 var Y = (from x in X select f(x)).toArray(); とか書けばよし。しかも、 UnaryFunction みたいな…
std::valarray::operator=() は、サイズの異なる valarray 間では未定義。 vector のように assign チックには働かない。そして、この場合、エラーも出ない。したがって、初めてつかうときなど、あらかじめ、 std::valarray::resize() で容量を確保しておく。
たとえば、ある空間上の点を表す型 Point があるとする。 この点の集合は、たとえば配列とか、 std::vector とか。中身は実体でもいいし、ポインタでもいいし、点のIDでもいい。 で、この集合 A に、構造情報も付け加えたい。たとえば、 kd-tree とか、 Dela…
TR1 では、 cmath に std::tr1::legendre, std::tr1::assoc_legendere が用意されている。 次数 l が 128 以上では結果が環境依存らしい。
あるクラスのメンバ関数内では、同じクラスのインスタンスの private メンバにアクセスできる。 class A { public: A& operator+=(const A& rhs) { x_ += rhs.x_; // rhs.x_ にアクセス可能 return *this; } private: int x_; }; 知らなかった…。 friend に…
http://eigen.tuxfamily.org/ これはなかなか使いやすそう。 Fedora のパッケージにも含まれてる。ただし、バージョン 2 はまだベータ。
ある vector 要素をアルゴリズムを使ってストリームに適用させたいときがある。例えば、自分で作った型 Vec (vector と紛らわしいな)があって、これは std::ostream& operator を持っている。このとき vector<Vec> a を全部表示したい。 方法 1 (for) for(size_t</vec>…
C では通常、グローバルスコープに置かれた宣言や定義は他のオブジェクトから参照可能。つまり、あるソースで int gVar;とあれば、他のソースで extern int gVar;とすれば、リンカがこの2つを結合してくれる。しかし、間違って同じ名前のグローバル変数が複…
標準 C++ では, cmath の各関数は float, double, long double にオーバーロードされている。 例えば, abs() は double abs(double x); float abs(float x); long double abs(long double x);が定義されている。参考: http://www.ishiboo.com/~nirva/c++/stl…