前述のグラフのプログラムで、隣接行列を"vector< bitset<8> > a ;"で宣言すると、 その初期化において、"a.push_back( bitset<8>( … ) ;" を使って、 手作業で要素を初期化していた。 文法的にも、ややこしそうなものをクラスに渡すことになるし、しかたがないと思っていた。 でも、改めてC++の解説を読んでいたら、C++0xであれば、使えそうな文法が…
// bitsetのベクトル vector< bitset<N> > a = { bitset<N>( 0x02 ) , bitset<N>( 0x0D ) , bitset<N>( 0x42 ) , bitset<N>( 0x12 ) , bitset<N>( 0x28 ) , bitset<N>( 0xD0 ) , bitset<N>( 0xA4 ) , bitset<N>( 0x60 ) , } ;
ただし、この機能は、g++4.4.5であれば、"error: in C++98 'a' must be initialized…" とエラーが 表示されてしまう。コンパイルするときには、次のように書くみたい。
$ g++ -std=c++0x graph-bitset.cxx
C++0xを読んでいたら、LISP屋の飛びつくラムダ式なんてのが書いてあったので、 思わず試さずにはいられなかった。
vector<int> a = { 1,2,3,4,5 } ; int main() { int sum = 0 ; for_each( a.begin() , a.end() , [&sum]( int x ) { sum += x ; } ) ; return 0 ; }
試してみたけど、動かんじゃん….でも調べてみると、g++4.5以降とな…