Daily bit(e) C++. std::adjacent_find
Добавлено 19 февраля 2026 в 11:37
Daily bit(e) C++ 17. std::adjacent_find – алгоритм линейного поиска, возвращающий первую смежную пару элементов, удовлетворяющих предикату.

Алгоритм std::adjacent_find — это алгоритм линейного поиска, который возвращает итератор на первую пару смежных элементов, удовлетворяющих заданному бинарному предикату.
Итератор будет указывать на первый из двух элементов.
Данный алгоритм имеет как вариант для параллельного выполнения в C++17, так и версию для диапазонов в C++20.
#include <vector>
#include <string>
#include <algorithm>
std::vector<int> data{1,2,3,4,4,5,6,7,7,8,9};
// найти первую пару смежных элементов, равных друг другу
auto it = std::adjacent_find(data.begin(), data.end(), std::equal_to<>{});
// *it == 4
std::string delimited =
"this is a string\"(with an embeded message)\" that continues";
// Найти последовательность "(
auto start = std::adjacent_find(
delimited.begin(), delimited.end(),
[](char l, char r) {
return l == '"' && r == '(';
});
// Найти последовательность )" , которая следует после "(
auto end = std::adjacent_find(
start, delimited.end(),
[](char l, char r) {
return l == ')' && r == '"';
});
std::string embeded(start+2, end); // пропустить "(
// embeded == "with an embeded message"
delimited.erase(start, end+2); // также стереть )"
// delimited == "this is a string that continues"
std::vector<std::string> labels{"a", "bc", "de", "fgh"};
// Найти пару смежных строк одинаковой длины
auto len = std::ranges::adjacent_find(
labels, std::equal_to<>{},
[](const auto& l) {
return l.length();
});
// *len == "bc"
