Привіт усім! В даній статті висвітлений алгоритм std::find з бібліотеки C++ STL.
template <class InputIterator, class T>
InputIterator find (InputIterator begin, InputIterator end, const T& val) ;
std::find це алгоритм STL, який призначений для пошуку елементів на проміжку вказаного ітераторами [begin, end) за допомогою оператора "==". За своєю роботою і часом роботи подібний до лінійного пошуку. Перші два ітрератори призначені для обмежування проміжку, в якому буде виконуватися пошук елемента з значенням val. В результаті своєї роботи, алгоритм повертає ітератор, який вказує на перший знайдений елемент послідовності з значенням val, або end, якщо елемент не знайдено.

Приклади

Приклад #1

Розглянемо найпростіший приклад використання алгоритму find - пошук символа у об'єкті класу string.
#include <algorithm> /* усі алгоритми включно з find */
#include <iostream> /* об'єкт cout */
#include <string> /* клас string */
using namespace std ; /* пищемо усе без std */

/* головна функція програми */
int main (int argc, char** argv)
{
  /* створюємо тестовий рядок символів 
  ** на якому будемо виконувати досліди */
  string example = "This is example string from www.kytok.org.ua." ;
  /* буква, яку будемо шукати у рядку */
  char s_char = 'w' ;
  
  /* ітератор, який буде вказувати на знайдений елемент */
  string::iterator result ;
  
  /* виконуємо пошук значення, яке міститься у 
  ** s_char у рядку символів  починаючи 
  ** від початку послідовності до кінця */
  result = find (example.begin (), example.end (), s_char) ;
  
  /* перевіряємо, що повернув алгоритм */
  if (result!=example.end())
  {
    /* у разі успіху */
    cout << "Char '" << s_char << "' was found" << endl ;
  }
  else
  {
    /* у випадку не знайденого елемента */
    cout << "Didn`t find char '" << s_char << "' in string." << endl ;
  }
  
  return 0 ;
}
Після компілювання і виконання даної програми у вікні терміналу можна побачити наступне:

cpp_std_find_sample1-cxx_demo_program_find_example_output

Приклад #2

Розглянемо складніший приклад. Створимо програму, подібну з статті "Обчислення кількості входжень символів у рядку", тобто реалізуємо обрахунок кількості примірників символа у рядку символів. До слова, даний функціонал реалізовує алгоритм std::count.
#include <algorithm> /* усі алгоритми включно з find */
#include <iostream> /* об'єкт cout */
#include <string> /* клас string */
using namespace std ; /* пищемо усе без std */

/* головна функція програми */
int main (int argc, char** argv)
{
  /* створюємо тестовий рядок символів 
  ** на якому будемо виконувати досліди */
  string example = "This is example string from www.kytok.org.ua." ;
  /* буква, яку будемо шукати у рядку */
  char s_char = 'w' ;
  
  /* ітератор, який буде вказувати на знайдений елемент */
  string::iterator si = example.begin () ;
  /* змінна буде містити кількість 
  ** символів s_char у рядку example */
  unsigned int cnt = 0 ;
  
  /* в циклі використовуємо алгоритм find для 
  ** знаходження примірника символу, 
  ** який міститься у змінній s_char */
  while ( (si=find(si, example.end(), s_char)) < example.end() )
  {
    /* збільшуємо кількість на одиницю */
    ++ cnt ;
    /* інкрементуємо ітератор, щоб не виник безкінечний цикл, 
    ** тобто зменшуємо проміжок пошуку на один елемент 
    ** (який знайдений і нього вказує si) */
    ++ si ;
  }
  
  /* виводимо у термінал повідомлення з кількістю входжень */
  cout << "In string \"" 
       << example << "\" char '" 
       << s_char 
       << "' happens " << cnt << " times." << endl ;
  
  return 0 ;
}
Виконуємо дану програму у терміналі і отримуємо наступне: cpp_std_find_sample-cxx_demo_program_for_find_algorithm_with_chars_count