|
Программирование >> Операторы преобразования типа
О Для выявления различий в случае несовпадения интервалов следует использовать алгоритм 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
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |