Функция search
Функция search из секции algo ищет первую позицию,
с которой начинается заданная подпоследовательность в диапазоне.
В первый параметр мы передаем итератор начала диапазона поиска,
во второй - итератор конца диапазона поиска, в третий - итератор
начала искомой подпоследовательности, а в четвертый - итератор
конца искомой подпоследовательности. Функция возвращает итератор
на первый элемент найденной подпоследовательности или итератор
конца диапазона поиска, если подпоследовательность не найдена.
Синтаксис
search(first1, last1, first2, last2)
Пример
Давайте найдем подпоследовательность {3, 4, 5} в векторе
{1, 2, 3, 4, 5} и выведем позицию, с которой она начинается:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5};
vector<int> sub = {3, 4, 5};
auto res = search(v.begin(), v.end(), sub.begin(), sub.end());
if (res != v.end()) {
cout << res - v.begin() << endl;
} else {
cout << "not found" << endl;
}
return 0;
}
Результат выполнения кода:
2
Пример
Давайте попробуем найти подпоследовательность {9, 9}
в векторе {1, 2, 3, 4, 5}. Такой подпоследовательности
в векторе нет, поэтому функция вернет итератор конца диапазона:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5};
vector<int> sub = {9, 9};
auto res = search(v.begin(), v.end(), sub.begin(), sub.end());
if (res != v.end()) {
cout << res - v.begin() << endl;
} else {
cout << "not found" << endl;
}
return 0;
}
Результат выполнения кода:
"not found"