×
Traktatov.net » Язык программирования C++. Пятое издание » Читать онлайн
Страница 704 из 714 Настройки

Эти алгоритмы требуют, чтобы элементы в исходной последовательности уже были упорядочены. Эти алгоритмы ведут себя подобно одноименным функциям-членам ассоциативных контейнеров (см. раздел 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 был итератором вывода, а итераторы, обозначающие исходный диапазон, должны быть