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以降とな...

 

2015年12月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

アーカイブ

Google

このブログ記事について

このページは、T-Saitohが2011年1月19日 16:30に書いたブログ記事です。

ひとつ前のブログ記事は「グラフ探索」です。

次のブログ記事は「2次元座標の拡大縮小回転移動」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。