Программирование >>  Операторы преобразования типа 

1 ... 107 108 109 [ 110 ] 111 112 113 ... 239


PRINTJLEMENTSCcoll. coll: ): /* Аргументы checkEvenC)

* - проверка последовательности чет нечет чет */

bool checkEvenArgs[3] = { true, false, true };

Поиск первого подинтервала в coll vector<int>:;1terator pos:

pos = search Ccoll.beglnO. coll.endC). Интервал

checkEvenArgs. checkEvenArgs+3. Значения подинтервала checkEven); Критерий

Цикл повторяется до тех пор. пока внутри coll

успешно находится очередное вхождение подинтервала

while Cpos != coll .endO) {

Вывод позиции первого элемента cout subrange found starting with element distanceCcoll .beginO.pos) + 1 endl:

Поиск следующего подинтервала в coll

pos = search C++pos, coll.endC). Интервал

checkEvenArgs. checkEvenArgs+3. Значения checkEven): Критерий

Программа выводит следующий результат:

coll: 123456789 subrange found starting with element 2 subrange found starting with element 4 subrange found starting with element 6

Поиск последнего подинтервала

Forwardlterator

flnd end CForwardlterator beg. Forwardlterator end.

Forwardlterator searchBeg. Forwardlterator searchEnd)

Forwardlterator

find end CForwardlterator beg. Forwardlterator end.

Forwardlterator searchBeg. Forwardlterator searchEnd. BinaryPredicate op)

О Обе формы возвращают позицию первого элемента в последнем подинтервале интервала [beg,end), совпадающем с искомьшл интервалом [searchBeg,searchEnd).

О В первой форме элементы найденного подинтерва.т1а должны быть равны элементам искомого интервала.



О Во второй форме вызов бинарного предиката op(elem,searchElern) для соответствующих элементов искомого интервала и подинтервала должен возвращать true.

О Если подходящий элемент пе найден, обе формы возвращают end.

О Предикат ор не должен изменять свое состояние во время вызова. За подробностями обращайтесь на с. 303.

О Предикат ор не должен изменять передаваемые аргументы.

О Проблема поиска интервала по известным значениям начального и конечного элементов рассматривается иа с. 109.

О Эти алгоритмы не входили в исходную версию STL. К сожалению, им было присвоено имя find end() вместо search end(), что было бы гораздо логичнее, поскольку алгоритм поиска первого подинтервала называется search().

О Сложность линейная (не более numberOfElementsx.numberofSearchElements сравнений или вызовов ор соответственно).

Следующий пример показывает, как найти последнее вхождение серии элементов внутри другой последовательности (сравните с примером использования алгоритма search() на с. 345):

algo/flndendl.cpp #1nclude algostuff.hpp using namespace std;

Int ma1n()

deque<1nt> col 1: 11st< int> subcoll;

INSERT ELEMENTS(coll.l.7): INSERT ELEMENTS(C0ll.l.7);

INSERTJLEMENTS(subcoll.3.6);

PRiNTJLEMENTSCcoll. coll: ): PRINTJLEMENTSCsubCOl 1. subcol 1 : );

Поиск поспеднего вхождения subcoll в coll deque<1nt>::Iterator pos;

pos - f1nd end Ccoll .beginO. coll.endO. Интервал ,

subcoll .beginC). subcoll ,endO); Подинтервал

Цикл повторяется до тех пор. пока внутри coll успешно находится очередное вхождение подинтервала deque<int>;:Iterator endCcoll.endC)): while Cpos != end) {

Вывод позиции первого элемента



cout Subcoll found starting with element distanceCcoll .beginO.pos) + 1 endl:

Поиск следующего вхождения subcoll end = pos:

pos - find end (coll.beginO. end. Интервал

subcoll.beginO. subcoll .endO): Подинтервал

Программа выводит следующий результат:

coll; 12 3 4 5 6 7 8 9 subcoll; 3 4 5 6

subcoll found starting with element 10 subcoll found starting with element 3

Что касается второй формы алгоритма, обратитесь к примеру использования второй формы алгоритма search() на с. 346 - алгоритм find end() применяется аналогичным образом.

Поиск первого из нескольких возможных значений

Forwardlterator

f1nd first of (Forwardlteratorl beg. Forwardlteratorl end.

ForwardIterator2 searchBeg. ForwardIterator2 searchEnd)

Forwardlterator

find first of (Forwardlteratorl beg. Forwardlteratorl end.

ForwardIterator2 searchBeg. ForwardIterator2 searchEnd. BinaryPredicate op)

О Первая форма возвращает позицию первого элемента в интервале [beg,€nd), значение которого также встречается в интервале [searchBeg,searchEnd).

О Вторая форма возвращает позицию первого элемента в интервале [beg,end), для которого вызов предиката op(etem,searchElem) с элементами интервала \searchBeg,searchEnd) возвращает true.

О Если подходящий элемент не найден, обе формы возвращают end.

О Предикат ор не должен изменять свое состояние во время вызова. За подробностями обращайтесь на с. 303.

О Предикат ор не должен изменять передаваемые аргументы.

О Используя обратные итераторы, можно найти последнее из нескольких возможных значений.

О Алгоритмы не входили в исходную версию STL.

О Сложность линейная (не более numberOfElementsnumberofSearchElements сравнений или вызовов ор соответственно).



1 ... 107 108 109 [ 110 ] 111 112 113 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика