find_if接受一元謂詞,因此傳遞給find_if的可呼叫物件必須接受單一引數。
舉個例子:
vector vec=
;auto wc =
find_if
(vec.
begin()
,vec.
end(),
[sz]
(const string &words)
);
當中的lambda表示式[sz](const string &words)
,轉化為函式很簡單,如下所示:
bool
check_size
(const string &words,string::size_type sz)
但是如果我們在find_if,使用check_size來代替lambda表示式,將會出現問題。
auto wc =
find_if
(vec.
begin()
,vec.
end(
),check_size)
;
因為在上述表示式中,check_size有兩個引數,但是傳遞給該可呼叫對像是單一引數,因此這種寫法是不正確的。
書中10.3.2節練習10.18,不小心也會出現同樣問題。正確寫法如下:
auto end_patition =
partition
(vec.
begin()
,vec.
end(
),lambda表示式)
不宜使用函式作為引數。
以上是本人對《c++ primer》書中354頁的理解整理。
C 一元謂詞和二元謂詞
include include 演算法標頭檔案 include include using namespace std 返回型別為bool型別 的operator struct greatstruct for each需要使用的偽函式 template typename t void printer...
08 一元函式物件和一元謂詞
include using namespace std include string include include include set include include functional 函式物件 類過載了函式呼叫操作符,這樣的類定義的物件稱為函式物件 template class show...
STL演算法設計理念 謂詞,一元謂詞demo
謂詞 一元函式物件 函式引數1個 二元函式物件 函式引數2個 一元謂詞 函式引數1個。函式返回值是bool型別,能夠作為乙個推斷式 謂詞能夠使乙個仿函式,也能夠是乙個 函式。demo 一元謂詞 include include include include using namespace std t...