2014-02-05-01-C++のラムダ式の話 - project-enigma

2014-02-05-01-C++のラムダ式の話

>> Site top >> weblog >> 月別アーカイブ >> 2014年02月のlog >> 2014-02-05-01-C++のラムダ式の話

最終更新日付:2014/02/05 23:50:00


C++のラムダ式の話

2014 年 02 月 05 日

C++ 0x11 の目玉といえば、やはりラムダ式ではなかろうか。g++ でもって使ってみようとして、最初に書いたコードは以下のようなものだった。

int main( void ) {
    std::array<int, 10> arr;
    std::iota( arr.begin(), arr.end(), 0 );
    std::for_each( arr.begin(), arr.end(),
                   []( int x ) {
                       printf( "%d\n", x );
                   } );
    return 0;
}

‥‥‥たしかに、ファンクタや関数を別途作成する必要なくインラインで書くことができる。シンタックスについては、まぁ仕方ないのだろう。某言語みたいに互換性をほとんど丸ゴト無視して言語を改訂するのは論外だから、「既存のコードに影響しないこと」という縛りの下で新しい言語機能を作らなきゃならないんだもんな。

で、ラムダ式の先頭にある、[ ]。ラムダ式の外部にある変数を参照する場合にはそこに記述するらしい。これを試すのと、あとは使い道が変更された auto でラムダ式を変数に入れておくコードとして次に書いてみたのが以下。

int main( void ) {
    std::array<int, 10> arr;
    std::iota( arr.begin(), arr.end(), 0 );
    int acc = 0;
    auto func = [&acc]( int x ) {
                    acc += x;
                };
    std::for_each( arr.begin(), arr.end(), func );
    printf( "acc = %d.\n", acc );
    return 0;
}

まぁこんなことしないで numeric の accumulate を使えば良いのだけれど、とにかくラムダ式でこんなことができるんだな、というのはわかった。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : C/C++

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.