Эти алгоритмы требуют, чтобы элементы в исходной последовательности уже были упорядочены. Эти алгоритмы ведут себя подобно одноименным функциям-членам ассоциативных контейнеров (см. раздел 11.3.5).
Алгоритмы >equal_range()
, >lower_bound()
и >upper_bound()
возвращают итераторы на позиции последовательности, куда мог бы быть вставлен заданный элемент при сохранении существующего порядка в последовательности. Если элемент больше всех остальных в последовательности, то возвращаемый итератор будет итератором после конца.
Каждый алгоритм предоставлен в двух версиях: первая использует для проверки элементов оператор меньше (><
) типа элемента, а вторая использует заданную функцию сравнения. В следующих алгоритмах ">x
меньше, чем >y
" означает, что выражения >x
>comp(x, y)
истинны:
>lower_bound(beg, end, val)
>lower_bound(beg, end, val, comp)
Возвращает итератор, обозначающий первый элемент, значение которого больше или равно значению >val
, или итератор >end
, если такого элемента нет.
>upper_bound(beg, end, val)
>upper_bound(beg, end, val, comp)
Возвращает итератор, обозначающий первый элемент, значение которого меньше значения >val
, или итератор >end
, если такого элемента нет.
>equal_range(beg, end, val)
>equal_range(beg, end, val, comp)
Возвращает пару (см. раздел 11.2.3), член >first
которой является итератором, возвращаемым функцией >lower_bound()
, а член >second
— итератором, возвращаемым функцией >upper_bound()
.
>binary_search(beg, end, val)
>binary_search(beg, end, val, comp)
Возвращает логическое значение, свидетельствующее о наличии в последовательности элемента, значение которого равно >val
. Два значения, >x
и >y
, считаются равными, если >x
не меньше >y
и >y
не меньше >x
.
А.2.4. Алгоритмы записи в элементы контейнера
Запись в элементы контейнера осуществляется многими алгоритмами. Эти алгоритмы могут отличаться видом итераторов, используемых для обозначения их исходной последовательности, а также тем, осуществляют ли они запись в элементы исходного диапазона или указанного результирующего диапазона.
Для обозначения назначения этим алгоритмам требуются итераторы вывода. Версии >_n
получают второй определяющий количество аргумент и записывают заданный набор элементов по назначению.
>fill(beg, end, val)
>fill_n(dest, cnt, val)
>generate(beg, end, Gen)
>generate_n(dest, cnt, Gen)
Присваивают новое значение каждому элементу исходной последовательности. Алгоритм >fill()
присваивает значение >val
; алгоритм >generate()
выполняет объект генератора >Gen
. Генератор — это вызываемый объект (см. раздел 10.3.2), возвращающий при каждом вызове разные значения. Алгоритмы >fill()
и >generate()
возвращают тип >void
. Версии >_n
возвращают итератор на позицию непосредственно после последнего элемента, записанного в последовательность назначения.
Каждый из этих алгоритмов читает исходную последовательность и пишет последовательность вывода. Они требуют, чтобы >dest
был итератором вывода, а итераторы, обозначающие исходный диапазон, должны быть