@specsoftdev live:.cid.8e17e9b93cabb607 specsoftdev@gmail.com
std::upper_bound
Актуально для C++23.

#include <algorithm>
Актуально на 2024-03-06.



Define overload #1
template<class ForwardIterator, class Tp>
constexpr inline ForwardIterator
upper_bound(ForwardIterator first, ForwardIterator last, const Tp& value);

Ищет первый элемент в последовательности [first, last], который больше "value".
Последовательность [first, last] должна быть отсортированна в порядке возрастания.
Вернёт итератор на этот элемент или last, если подходящего значения не нашлось.
Для последовательности из итераторов поддерживающих произвольный доступ, cложность алгоритма log 2(n).
Для последовательности из итераторов НЕ поддерживающих произвольный доступ, cложность алгоритма O(n).
Example, possible implementation
Define overload #2
template<class ForwardIterator, class Tp, class Compare>
constexpr ForwardIterator
upper_bound(ForwardIterator first, ForwardIterator last,
            const Tp& value, Compare comp);

Ищет первый элемент в последовательности [first, last], для которого бинарный предикат comp(value, elem) возвратит false.
Диапазон [first, last] должен быть отсортирован так же, как если бы он был отсортирован с помощью бинарного предиката "comp".
Вернёт итератор на этот элемент или last, если подходящего значения не нашлось.

Для последовательности из итераторов поддерживающих произвольный доступ, cложность алгоритма log 2(n).
Для последовательности из итераторов НЕ поддерживающих произвольный доступ, cложность алгоритма O(n).
Example, possible implementation


Examples


Example 1:
#include <iostream>
#include <algorithm>

int main()
{
    auto data = {0, 1, 3, 5, 7, 9};
    auto it = std::upper_bound(std::begin(data), std::end(data), 4);
    if (it != std::end(data))
    {
        std::cout << *it << std::endl;
    }
    return 0;
}

5


Changelog



See also

TODO

This page was last modified on 2024-03-06