Функция find_end
Функция find_end из заголовочного файла <algorithm>
ищет последнее вхождение одной последовательности в другую.
В первый и второй параметры мы передаем итераторы начала и конца
диапазона, в котором выполняется поиск, а в третий и четвертый -
итераторы начала и конца искомой подпоследовательности.
Функция возвращает итератор на начало последнего найденного
вхождения. Если вхождение не найдено, возвращается итератор last1.
Существует также перегрузка с пятым параметром - предикатом, который задает условие сравнения элементов.
Синтаксис
find_end(first1, last1, first2, last2)
find_end(first1, last1, first2, last2, pred)
Пример
Давайте найдем последнее вхождение подпоследовательности
{3, 4} в последовательность {1, 2, 3, 4, 3, 4, 5}:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 3, 4, 5};
vector<int> sub = {3, 4};
auto it = find_end(v.begin(), v.end(), sub.begin(), sub.end());
if (it != v.end())
{
cout << "Found at position: " << (it - v.begin()) << endl;
}
else
{
cout << "Not found" << endl;
}
return 0;
}
Результат выполнения кода:
"Found at position: 4"
Пример
Давайте найдем последнее вхождение подстроки "cd"
в строку "abcdecd":
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
string str = "abcdecd";
string sub = "cd";
auto it = find_end(str.begin(), str.end(), sub.begin(), sub.end());
if (it != str.end())
{
cout << "Found at position: " << (it - str.begin()) << endl;
}
else
{
cout << "Not found" << endl;
}
return 0;
}
Результат выполнения кода:
"Found at position: 5"
Пример
Давайте найдем последнее вхождение подпоследовательности
{1, 2} в последовательность {3, 4, 5},
где вхождение отсутствует:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> v = {3, 4, 5};
vector<int> sub = {1, 2};
auto it = find_end(v.begin(), v.end(), sub.begin(), sub.end());
if (it != v.end())
{
cout << "Found at position: " << (it - v.begin()) << endl;
}
else
{
cout << "Not found" << endl;
}
return 0;
}
Результат выполнения кода:
"Not found"
Смотрите также
-
функция
find,
которая ищет первое вхождение значения в диапазон -
функция
search,
которая ищет первое вхождение подпоследовательности -
функция
search_n,
которая ищет первое вхождение нескольких одинаковых элементов -
функция
find_first_of,
которая ищет первый элемент из заданного набора