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 も入っちゃう。