STL find_if_not查詢演算法
阿新 • • 發佈:2018-12-12
find_if_not() 可以在輸入迭代器所定義的範圍內查詢單個物件,該演算法會在前兩個引數指定的範圍內查詢可以使第三個引數指定的謂詞 返回 false 的第一個物件。謂詞不能修改傳給它的物件。
find_if_not() 會返回一個指向被找到物件的迭代器,如果沒有找到物件,會返回這個序列的結束迭代器。可以按如下方式用 find_if_not() 演算法來查詢使謂詞為 false 的元素:
vector<int> numbers{ 4, -5, -3, 0, 5, 10, -2, -1 }; 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 的元素。這段程式碼會找到 7 個元素,它們分別是4、-5、-3、0、5、-2、-1。