1

ラムダ式がどのように機能するかを学ぶためにラムダ式をいじっていましたが、問題に遭遇しました。私は自分が間違っていることを理解しようとしていますが、そうではないようです。コンパイラは、次の単純な例を受け入れることを拒否します。


  int a = 2;
  std::vector<int> vv(10);
  vv[2]=2;
  std::count( vv.begin(), vv.end(), [&a](int z) { return a == z; } );

エラーが発生します


Error   1   error C2678: binary '==' : no operator found 
  which takes a left-hand operand of type 'int' (or there is no 
  acceptable conversion) e:\program files (x86)\microsoft visual studio
  11.0\vc\include\xutility 3243

私は何を間違っていますか?

4

1 に答える 1

4

アルゴリズムは、述語が等価または単項述語を使用した値の比較に基づいているかどうかを知る必要があります。2 つを区別するために、_ifさまざまなアルゴリズムに接尾辞が使用されます: find_if()`copy_if()、など。ラムダは問題ありませんが、シーケンスcount_if()の と同等ではありません。述語を使用するときに使用value_typeする必要があります。std::count_if()

std::count_if( vv.begin(), vv.end(), [&a](int z) { return a == z; } );

... または値:

std::count( vv.begin(), vv.end(), a);
于 2013-01-04T06:49:11.513 に答える