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

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

find_if_not() 會返回一個指向被找到物件的疊代器,如果沒有找到物件,會返回這個序列的結束疊代器。可以按如下方式用 find_if_not() 演算法來查詢使謂詞為 false 的元素:
size_t count {}; int five {5};
auto start_iter = std::begin(numbers);
auto end_iter = std::end(numbers);
while((start_iter = std::find_if_not(start_iter, end_iter,[five](int n) {return n > five; })) != end_iter)
{
    ++count;
    ++start_iter;
}
std::cout << count << " elements were found that are not greater than "<< five << std::endl;
find_if_not() 的第三個引數是一個謂詞,它和先前在 find_if() 演算法中使用的 lambda 表示式相似。當元素大於 five 時,這個函數才會返回 true。當謂詞返回 false 時,就找到了一個元素,所以這個操作可以用來查詢小於或等於 five 的元素。這段程式碼會找到 5 個元素,它們分別是 5、-5、-6、5、5。