ホーム » スタッフ » 斉藤徹 » C++0xを使う

2011年1月
« 12月   2月 »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

最近の投稿(電子情報)

アーカイブ

カテゴリー

C++0xを使う

前述のグラフのプログラムで、隣接行列を"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以降とな…