c++11 lambda表达式问题(vs2012更新1)

c++11 lambda expression issue (vs2012 update 1)

本文关键字:更新 vs2012 lambda 表达式 问题 c++11      更新时间:2023-10-16

我一直在摆弄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.0vcincludexutility 3243

我做错了什么?

算法需要知道谓词是基于使用相等还是一元谓词来比较值。为了区分两者,各种算法都使用了_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);