C++ find_if(STL find_if)查詢演算法詳解

2020-07-16 10:04:32
find_if() 同 find() 一樣,為在輸入疊代器所定義的範圍內查詢單個物件的演算法,它可以在前兩個引數指定的範圍內查詢可以使第三個引數指定的謂詞返回 true 的第一個物件。謂詞不能修改傳給它的物件。

find_if() 會返回一個指向被找到物件的疊代器,如果沒有找到物件,會返回這個 序列的結束疊代器。

可以按如下方式使用 find_if() 來查詢 numbers 中第一個大於 value 的元素:
int value {5};
auto iter1 = std::find_if(std::begin(numbers), std::end(numbers),[value](int n) { return n > value; });

if(iter1 != std::end(numbers))
    std::cout << *iter1 << " was found greater than " << value << ".n";
find_if() 的第三個引數是一個 lambda 表示式的謂詞。這個 lambda 表示式以值的方式捕獲 value,並在 lambda 引數大於 value 時返回 true。這段程式碼會找到一個值為 46 的元素。