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

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


О Для выявления различий в случае несовпадения интервалов следует использовать алгоритм mismatchO (см. с. 354).

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

Следующий пример демонстрирует использование обеих форм алгоритма equal(). Первый вызов проверяет равенство элементов в двух интервалах, а второй вызов при помощи вспомогательной предикатной функции проверяет совпадение соответствующих элементов двух коллекций по четности/нечетности.

algo/equall.срр include algostuff,hpp using namespace std;

bool bothEvenOrOdd Cint elemi. int elem2)

return elemi 2 == elem2 2;

int mainO {

vector<int> colli; list<1nt> C0112:

INSERT ELEMENTSCcol 11.1.7); lNSERT ELEMENTSCcoll2,3.9):

PRINTJLEMENTSCCol 11. col 11; ); PRINTJLEMENTSCcol 12. col 12; );

Проверка равенства двух коллекций

If Cequal (colli.beginC). colli.endC). Первый интервал coll2.beginO)) { Второй интервал

cout colli == col 12 endl;

else {

cout colli != coll2 endl;

Проверка соответствия четности/нечетности элементов if Cequal (colU.beginO. colli,endO. Первый интервал C0112.beginO. Второй интервал

bothEvenOrOdd)) { Критерий сравнения

cout even and odd elements correspond endl;

else {

cout even and odd elements do not correspond endl;



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

colli; 12 3 4 5 6 7 соП2: 3 4 5 6 7 8 9 colli != С0112

even and odd elements correspond

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

pa1r<InputIteratorl. InputIterator2> mismatch (Inputlteratorl beg. Inputlteratorl end. InputIterator2 cnpBeg)

pair<InputIteratorl. InputIterator2>

mismatch (Inputlteratorl beg. Inputlteratorl end.

InputIterator2 cnpBeg.

BinaryPredicate op)

О Первая форма возвращает [beg,end) и [cmpBeg,...) первые два элемента интервалов, имеющие разные значения.

О Вторая форма возвращает [beg,end) и [cmpBeg,...) первые два элемента интервалов, для которых бинарный предикат op{elem,cmpElem) возвращает false.

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

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

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

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

О Для проверки равенства интервалов следует использовать алгоритм equal() (см. с. 352).

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

Пример использования обеих форм алгоритма mismatch():

algo/mismal.cpp include algostuff.hpp using namespace std;

int mainO {

vector<int> colli: list<int> C0112;

INSERT ELEMENTS(colll.l.6);



for Cint 1=1: 1<=16: 1*=2) { coll2.push backC1):

coll2.push back(3):

PRINT ELEMENTS(col11. col 11: ): PRINTJLEMENTSCcoll2. col 12: ):

Поиск первого расхождения

pair<vector<1nt>:iterator.11st<lnt>::iterator> values; values = mismatch (colli.beginO. colli.endO. Первый интервал coll2.beginO); Второй интервал

If (values.first == colli.endO) { cout no mismatch endl;

else {

cout first mismatch:

*values.first and *values.second endl;

/* Поиск первой позиции, в которой элемент соП * не меньше соответствующего элемента col 12 */

values = mismatch (colU.beginO. colli.endO. Первый интервал coll2.beginO. Второй интервал

less equal<int>()): Критерий

if (values.first == colli.endO) {

cout always less-or-equaV endl:

else {

cout not less-or-equal: *values.first and *values.second endl:

Первый вызов mismatchO ищет первую позицию, в которой элементы двух интервалов имеют разные значения. Если такая позиция будет найдена, значения элементов направляются в стандартный выходной поток данных. Второй вызов ищет первую позицию, в которой элемент первой коллекции больще элемента второй коллекции, и возвращает их значения. Результат выполнения программы выглядит так:

colli: 12 3 4 5 6 С0112; 1 2 4 8 16 3 first mismatch; 3 and 4 not less-or-equal: 6 and 3



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

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