2013-01-04 55 views
1

我一直在擺弄lambda表達式以瞭解它們如何工作,但遇到了問題。我一直在試圖弄清楚我做錯了什麼,但似乎無法做到。編譯器只是拒絕接受這個簡單的例子:C++ 11 lambda表達式問題(vs2012更新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 

我在做什麼錯?

+7

'count'需要一個值來比較。 'count_if'採取謂詞.... – ildjarn

回答

4

算法需要知道謂詞是基於使用相等還是一元謂詞比較值。爲了區分這兩者,後綴_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); 
+0

謝謝,就是這樣! –