C++にてboost体験
C++の再学習にて、「C++クックブック」を見ているんだが、ライブラリにてboostの事例も多い。 んで、調べていると、昨日書いていたc++0xを使ったvectorの初期化だけど、 boost だと、boost::assign::list_of なんてぇ~のを使うと、c++0xを使わなくても書けちゃう。
#include <iostream> #include <vector> #include <boost/assign/list_of.hpp> using namespace std ; int main() { // 初期化リストの要素が() で囲まれているのがポイント、 // operator()() の演算子オーバーライドで実装しているみたい。 vector<int> v = boost::assign::list_of (1) (2) (3) ; for( vector<int>::iterator it = v.begin() ; it != v.end() ; it++ ) { cout << *it << endl ; } }
変態チックだな…当然、bitset<8>でも動くぜ…変態…
昨日は、c++0xのラムダ計算を試した(gcc4.5入れてなくって、コンパイルでけんかったけど) けど、boost にもラムダ計算がある…。 g++側に依存しないという意味では、boost の方が便利だけど、ここまでいくとなぁ… 参考サイト見つけたけど、さらに変態度が増している。
#include <iostream> #include <vector> #include <boost/assign/list_of.hpp> #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> int sum = 0 ; int main() { using namespace std ; using namespace boost::lambda ; vector< int > v = boost::assign::list_of ( 1 ) ( 2 ) ( 3 ) ; for_each( v.begin() , v.end() , sum += _1 ) ; cout << sum << endl ; }
追記:んでも、使う前にBoostのインストール。Mac と Debian にもいれてみた。
(( Mac OS X )) # fink list | grep boost # fink install boost1.35.systempython ## boost-jam,boost1.35.systempython, ## boost1.35.systempython-shlibs がインストールされる。 (( Debian GNU/Linux )) # aptitude search boost # aptitude install boost-all-dev ## debianでは様々なライブラリが細かくパッケージ化されている。 ## 何を使うか解らないので、ともかく全部いれてみた。 ## 変態な、boost/lambda も入っちゃう。
2次元座標の拡大縮小回転移動
グラフィックスの基本ということで、 座標の拡大縮小・回転・移動などの説明を行い、 説明プリントを見ながら、値渡し・ポインタ渡し・配列渡しの再確認。
配布資料を見ながら、座標の拡大縮小・回転・移動などの概念を説明し、 行列表記に慣れてもらう。線対称・点対称・拡大・移動・回転は、資料参照。 最終的に、すべての2次元の座標変換は、以下のような行列積と和で表せる。
特に、その結果を、以下のように扱うものはアフィン変換と呼ばれる。
この他に、グラフィックス処理では、大量の計算を伴い、計算速度の高速化への理解も 重要なので、最適化について紹介する。 基本的な、不変値計算のループ前移動や、整数演算化による高速化、最近CPUでの積和演算命令といったものをいくつか紹介する。