На этом шаге мы рассмотрим еще один пример использования алгоритма поиска первого соврадающего элемента.
В следующем примере алгоритм find_if() используется для поиска элементов по совершенно иному критерию:
//--------------------------------------------------------------------------- #include <vcl.h> #include <iterator> #include "algostuff.hpp" #include <conio.h> //необходимо для getch() #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused using namespace std; std::string ToRus(const std::string &in) { char *buff = new char [in.length()+1]; CharToOem(in.c_str(),buff); std::string out(buff); delete [] buff; return out; } int main() { vector<int> coll; vector<int>::iterator pos; INSERT_ELEMENTS(coll,1,9); PRINT_ELEMENTS(coll,"Вектор:\n "); // Поиск первого элемента, большего 3 pos = find_if (coll.begin(), coll.end(), // Интервал bind2nd(greater<int>(),3)); // Критерий // Вывод позиции cout << ToRus("Элемент в позиции ") << distance(coll.begin(),pos) + 1 << ToRus(" - первый, больший 3") << endl; // Поиск первого элемента, кратного 3 pos = find_if (coll.begin(), coll.end(), not1(bind2nd(modulus<int>(),3))); // Вывод позиции cout << ToRus("Элемент в позиции ") << distance(coll.begin(),pos) + 1 << ToRus(" - первый, кратный 3") << endl; getch(); return 0; } //---------------------------------------------------------------------------
При первом вызове find() простой объект функции в сочетании с адаптером bind2nd ищет первый элемент со значением, большим 3. При втором вызове передается более сложная комбинация для поиска первого элемента, делящегося на 3 без остатка.
Программа выводит следующий результат:
Рис.1. Результат работы приложения
На 113 шаге приведен пример использования алгоритма find() для поиска первого простого числа.
На следующем шаге мы рассмотрим поиск первых n последовательных совпадений.