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

этим алгоритмам требуются две пары прямых итераторов. Для обозначения первой своей последовательности алгоритм >find_first_of() использует итераторы ввода и прямые итераторы для второй. Эти алгоритмы ищут последовательность, а не одиночный элемент.

>search(beg1, end1, beg2, end2)

>search(beg1, end1, beg2, end2, binaryPred)

Возвращает итератор на первую позицию исходного диапазона, с которой начинается искомая последовательность. Возвращает итератор >end1, если искомая последовательность не найдена.

>find_first_of(beg1, end1, beg2, end2)

>find_first_of(beg1, end1, beg2, end2, binaryPred)

Возвращает итератор на первое вхождение в первом диапазоне любого элемента из второго диапазона. Возвращает итератор >endl, если искомое соответствие отсутствует.

>find_end(beg1, end1, beg2, end2)

>find_end(beg1, end1, beg2, end2, binaryPred)

Подобен алгоритму >search(), но возвращает итератор на последнюю позицию в исходном диапазоне, в которой второй диапазон встречается как внутренняя последовательность. Возвращает итератор >end1, если вторая последовательность пуста или не найдена.

А.2.2. Другие алгоритмы, осуществляющие только чтение

Для первых двух аргументов этим алгоритмам требуются итераторы ввода.

Алгоритмы >equal() и >mismatch() получают также дополнительный итератор ввода, обозначающий начало второго диапазона. Они также предоставляют две перегруженных версии. Первая версия для сравнения элементов использует оператор равенства (>==) базового типа, а вторая сравнивает элементы используя предоставленный пользователем предикат >unaryPred или >binaryPred.

>for_each(beg, end, unaryOp)

Вызываемый объект (см. раздел 10.3.2) >unaryOp применяется к каждому элементу в исходном диапазоне. Возвращаемое значение объекта >unaryOp (если оно есть) игнорируется. Если итераторы позволяют запись в элементы при помощи оператора обращения к значению, то вызываемый объект >unaryOp способен изменять элементы.

>mismatch(beg1, end1, beg2)

>mismatch(beg1, end1, beg2, binaryPred)

Сравнивает элементы в двух последовательностях. Возвращает пару (см. раздел 11.2.3) итераторов, обозначающих первые элементы в каждой не совпадающей последовательности. Если все элементы соответствуют друг другу, первый итератор возвращенной пары окажется равным >end1, а итератор >beg2 — смещению, равному размеру первой последовательности.

>equal(beg1, end1, beg2)

>equal(beg1, end1, beg2, binaryPred)

Выявляет равенство двух последовательностей. Возвращает значение >true, если каждый элемент в исходном диапазоне равен соответствующему элементу последовательности, начинающейся с позиции >beg2.

А.2.3. Алгоритмы бинарного поиска

Хотя эти алгоритмы можно использовать с прямыми итераторами, они обладают специализированными версиями, которые работают с итераторами прямого доступа и выполняются гораздо быстрей.

Этим алгоритмам требуются прямые итераторы, но они оптимизированы так, что выполняются намного быстрее, если вызываются с итераторами прямого доступа. С технической точки зрения, независимо от типа итератора, эти алгоритмы выполняют логарифмическое количество сравнений. Но при использовании с прямыми итераторами они должны выполнить линейное количество операций с итераторами для перебора элементов последовательности.