C++

Visual Studio でマクロ定義

ソースコードではなく、コンパイル(プリプロセス)実行時にマクロを定義する方法。プロパティページで「C/C++」→「プリプロセッサ」→「プリプロセッサの定義」がそれっぽい。探しても分からんかった。

それぞれのMat変数のサイズは不変として,以下の様なループ処理

cv::Mat a, b, c; while(1) { a = (b == b) & c; } と cv::Mat a, b, c, d; while(1) { d = b == b; a = d & c; } では,後者のほうが若干速い。その理由は,式テンプレート MatExpr をオペランドにとる演算は,加減乗除と要素毎の積(mul),負号,絶対値の演…

filesystem on Visual Studio

C++

VC2012?からは std::tr2::sys以下に filesystem 関係の標準ライブラリ候補が入った。これで Boost におさらばできる。Intel C++ コンパイラ2013でも動くので、以後はこれを使うようにしましょう。 ちなみに、ベースネーム取得はこんな感じ。 using std::tr2…

エンディアン反転

UNIX規格(の一部?)にはエンディアンを反転する関数が用意されている。

OpenCV cv::Mat を CvMat や IplImage と見なす

ラボメンバーのためのメモ。cv::Matクラスには CvMat 型や IplImage型への変換演算子が定義されているのでキャストできる。したがって、CvMatやIplImageしか受け付けない古いバージョンの関数を使う場合には明示的にキャストするか、もしくは以下のように暗…

accumulator_set と std::for_each

Boost 1.36 からある boost::accumulators::accumulator_set は統計を取るクラス (参照:letsboost::accumulators)。参照先にあるような例題では要素数が少ないのでそのまま書き下せるが、要素数が増えてくるとループで回すことになる。例えば以下のように。…

Boost on cygwin

いつのまにか、1.33.1-4 から最新版の 1.43 になってる…これでまたプログラミングと互換性の幅が広がる。

MIST

GitHub - mist-team/mist: MIST (Media Integration Standard Toolkit) 国産の画像処理系ライブラリ。3次元画像を扱えるらしいよ。各点の値は関数呼出し演算子 f(x, y, z) で取り出せるみたいなので見た目もよさげ?

EISATS

Raw Image (RAW形式画像ではない)の生データファイル形式の仕様はどこにも書いていないので、ソースコードから解析するしかないという…そしてそのソースコードはやっぱり読みにくい上に謎行動が目立つ…もっとシンプルで安全な方法があると思うんですが… 何に…

多様性

はじめてポリモーフィズムというものを使った。意外と便利。そして、基底クラスのメンバ関数内から派生クラスの仮想関数って呼べるのね。知らんかったよ。多様性のおかげで、同じコードが乱立してたフロー計算プログラムがすっきり。各手法の漸化式や独自パ…

関数バインダ

STL の std::bind1st や std::bind2nd は参照の参照問題を解決できないので、パフォーマンス的な問題が起こりうる。そこで、Boost の boost::bind。これは参照の参照問題を回避しているだけでなく std::ptr_fun などで関数オブジェクト化しなくても関数をそ…

Cast from C array to Boost::Array

http://d.hatena.ne.jp/kamekamekame877/20090627 での配列からのキャストを使った応用。 BOOST_STATIC_ASSERT(sizeof(int[10]) == sizeof(boost::array<int, 10>)); int a[10]; boost::array<int, 10> &b = *reinterpret_cast<boost::array<int, 10>*>(a);</boost::array<int,></int,></int,>

分散 variance

結構前に作ったんですが、STL となるべく互換性を持たせて作った分散を求める関数。内容も短いしイテレータさえあれば使えるので便利かも? #include <cmath> #include <iterator> #include <numeric> /*! variance between iterators 'b' and 'e' with average 'a'. */ template <typename V, typename InItr> inli</typename></numeric></iterator></cmath>…

関数の合成

合成関数はSGI ライブラリにはあるが、標準C++ライブラリには無い。使いたい場合は STLport か Boost を用いる…ってBoost では compose は無くなって Bind で代用すんのか。使い方は大体一緒?

GCCのRVO最適化のバグ?

warning: ‘r.203’ may be used uninitialized in this function note: ‘r.203’ was declared here コード上の変数名は r で、r.203 てのは多分RVO のために自動でつけられた名前か?自動的に埋め込まれたメンバ変数か…?わけ分からん。警告が出る箇所はコン…

std::distance and std::advance

<iterator> - C++ Reference それぞれイテレータの差を取得する関数とイテレータを前進させる関数。std::distance はイテレータ(ポインタ)から配列の添え字を計算するときなどに使う。単純便利なのに意外と今まで知らなかった…</iterator>

仮想デストラクタと多様性(ポリモーフィズム)

継承を使う場合には通常、基底クラスのデストラクタは仮想関数(デストラクタ)にする。なぜなら、基底クラスのポインタ経由で派生クラスオブジェクトを削除しようとすると、その結果は不定であるため。というわけで、Effective C++ では基底クラスのデストラ…

value of const std::valarray

26.3.2.3 valarray element access T operator[](size_t) const; T& operator[](size_t);

valarray on icc

const and valarray reference - C / C++ どうやら Intel コンパイラではアドレス取得が不可能な模様…かくなる上は、滅多に使わない const_cast。 const std::valarray<int> v(100); const int* p = &(*const_cast<std::valarray<int>*>(&v))[0]; 多分これで、標準準拠でもデータの先</std::valarray<int></int>…

std::valarray と NaN と max(), min(), sum()

標準C++ライブラリの std::valarray は、浮動小数点数型で NaN を含んでいると、メンバ関数 max(), min(), sum() の値が NaN になったりする。これは無論 valarray に限ったことではなく、std::vector だろうと配列だろうと、標準テンプレートライブラリ関数…

STL algorithm 等と速度

とっても微妙な話だけど、手軽に実行速度をなるべく上げたいときに STL を使うべきかそうでないか。GCC 4.3.4 のSTLのソースコードと、実際の計測速度とかから判断したもの。なお、最適化 -O3 を使っています。 std::copy, std::equal, std::fill_n bits/stl…

Google C++ スタイルガイド

textdrop.net - このウェブサイトは販売用です! -&nbsptextdrop リソースおよび情報 コーディング規則は世の中に沢山あるが、これは比較的まとまっているので参考になる。

GSL

今後はフリーでメジャーなライブラリを中心に使っていくことにした。そして自作は最小限で。コレスキー分解などが使えるので別のライブラリから乗り換える予定。

C++0x

リリース〆切が6年も伸びたw error

multi_array_ref

boost::multi_array_ref はメモリ上の連続データを multi_array として利用するためのインターフェイス。というわけで、これを使えば既存の std::vector や std::valarray のデータを boost::multi_array として使うこともできる。

Blitz++

http://www.oonumerics.org/blitz/manual/blitz04.html#l80 こ、これは! ステンシル(差分演算のための型抜き)がC++で作れる! これでソースコードが読みやすくなる?

MultiArray

やはり仕様が難しくて分かりにくい…しかし今の知識なら使えるぞ。イメージ的には、頓挫した標準ライブラリ valarray の slice, gslice で仕様化したかったことがきちんと実装されているという感じ。

Boost.MultiArray

The Boost Multidimensional Array Library (Boost.MultiArray) - 1.33.1 研究で多次元配列を多用するので、これまでは std::valarray をラッピングして使ってましたが、これからは Boost.MultiArray を使おうということで勉強中…。しかし、More on index_ra…

boost filesystem in cygwin

前日の日記にあるような問題があるので利用しないことに決定。

valarray まとめ

valarray http://docs.sun.com/source/820-2985/general/22.htm http://orange.zero.jp/cycode.wing/tips/cbuilder/stl-professor.html 四則演算、複合代入演算子、初等関数などがあらかじめ定義されていることは結構便利。また、GCC 4 の STL コードでは式…