Привіт усім! В даній статті висвітлений алгоритм 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 ;
}
Після компілювання і виконання даної програми у вікні терміналу можна побачити наступне:

Приклад #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 ;
}
Виконуємо дану програму у терміналі і отримуємо наступне: