1

我一直在摆弄 lambda 表达式以了解它们的工作原理,但遇到了一个问题。我一直试图弄清楚我做错了什么,但似乎无法。编译器只是拒绝接受这个简单的例子:


  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

算法需要知道谓词是基于使用相等性还是一元谓词比较值。为了区分这两者,_if后缀用于各种算法:find_if()`copy_if()count_if()等。 lambda 是可以的,但它与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 回答