Шаг 271.
Библиотека STL. Алгоритмы STL. Поиск элементов. Поиск первого совпадающего элемента (окончание)

    На этом шаге мы рассмотрим еще один пример использования алгоритма поиска первого соврадающего элемента.

    В следующем примере алгоритм 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 последовательных совпадений.




Предыдущий шаг Содержание Следующий шаг