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

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


Пример использования алгоритма find first of():

algo/findofl.cpp #include algostuff.hpp using namespace std:

Int mainC) {

vector<int> col 1: list<lnt> searchcoll:

INSERT ELEMENTS(coll.1.11): INSERT ELEMENTS(searchcoll.3.5):

PRiNTJLEMENTSCcoll, coll: ):

PRINTJLEMENTSCsearchcoll . searchcoll: );

Поиск в coll первого вхождения элемента из searchcoll vector<int>;;iterator pos;

pos = findJ1rst of Ccoll .beginC). coll.endC). Интервал

searchcoll,beginC). Начало искомых значений searchcoll.endO): Конец искомых значений cout first element of searchcoll in coll is element distanceCcoll .beginO.pos) + 1 endl:

Поиск в coll последнего вхождения search элемента из searchcoll vector<i nt>::reverse 1terator rpos:

rpos = findJirst of (coll .rbeginC). coll.rendO. Интервал

searchcol1.beginC). Начало искомых значений searchcoll .endO): Конец искомых значений cout last element of searchcoll in coll is element distanceCcoll.beginC).rpos.baseO) endl;

Второй вызов использует обратные итераторы для поиска последнего элемента со значением, равным значению одного из элементов searchcolL При выводе позиции элемента вызывается функция base(), которая преобразует обратный итератор в обычный (чтобы позиция отсчитывалась от начала коллекции). Обычно к результату distanceO прибавляется 1, так как для первого элемента расстояние равно О, однако base() смещает логическую позицию, на которую ссылается итератор, что приводит к желаемому эффекту (функция base() описана на с. 274).

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

coll: 1 2 3 4 5 6 7 8 9 10 11

searchcoll: 3 4 5

first element of searchcoll in coll is element 3 last element of searchcoll in coll is element 5



Поиск двух смежных элементов с равными значениями

Inputlterator

adjacent find (Inputlterator beg. Inputlterator end) Inputlterator

adjacent f1nd (Inputlterator beg. Inputlterator end. BinaryPredicate op)

О Первая форма возвращает позицию первого элемента со значением следующего элемента.

О Вторая форма возвращает позицию первого элемента в интервале [beg,end), для которого предикат op{elem,nextElem) возвращает true.

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

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

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

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

Следующая программа демонстрирует обе формы алгоритма adjacent find():

algo/adjfindl.cpp #1nc1ude algostuff.hpp using namespace std;

Функция проверяет, что значение следующего объекта вдвое больше

значения предыдущего

bool doubled (int elemi. int elem2)

return elemi * 2 == elem2;

int mainO

vector<int> col 1;

coll.push back(l) coll.push back(3) coll.push back(2) col 1.push back(4) coll.push back(5) coll.push back(5) col 1.push back(0)

PRINTJLEMENTS(coll . coll : );

Поиск первых двух элементов с одинаковыми значениями

vector<1nt>::iterator pos:

pos = adjacent find (coll.beginO. coll.endO):



352 Глава 9. Алгоритмьр STL

if Cpos != coll .endO) {

cout first two elements with equal value have position distanceCcoll .beginO.pos) + 1 endl:

Поиск первых двух элементов, для которых значение второго вдвое превышает эначение первого

pos = adjacent find Ccoll.beginO, coll.endC). Интервал

doubled); Критерий

if Cpos != coll .endO) {

cout first two elements with second value twice the first have pos. distanceCcoll.beginO.pos) + 1 endl:

Первый вызов adjacent find() ищет элементы с одинаковыми значениями. Вторая форма при помощи функции doubled() проверяет, что значение второго элемента вдвое больше значения первого. Программа выводит следующий результат:

coll: 13 2 4 5 5 0

first two elements with equal value have position 5

first two elements with second value twice the first have pos. 3

Сравнение интервалов Проверка на равенство

bool

equal СInputlteratorl beg. Inputlteratorl end. InputIterator2 cmpBeg)

bool

equal (Inputlteratorl йед. Inputlteratorl епб/, InputIterator2 cmpBeg. BinaryPredicate op)

О Первая форма проверяет полное совпадение элементов интервалов [beg,end) и [anpBeg,...) и возвращает результат в виде логической величины.

О Вторая форма проверяет, что каждый вызов бинарнорю предиката ор(е1ет, cmpElem) для соответствующих элементов интервалов lbeg,end) и [cmpBeg,...) возвращает true.

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

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

О Перед вызовом необходимо убедиться в том, что интервал, начинающийся с cmpBeg, содержит достаточное количество элементов.



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

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