Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 [ 112 ] 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239

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

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 cmpSeg)

pa1r<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: "):

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

pa1r<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



Сравнение по лексикографическому критерию

bool

lex1cographical compare (Inputlteratorl beg. Inputlteratorl end.

InputIterator2 beg. InputIterator2 end)

bool

lexicograph1cal conpare (Inputlteratorl beg. Inputlteratorl end.

InputIterator2 beg. InputIterator2 end. CompFunc op)

О Обе формы проверяют, что интервал Ibeg1,end1) меньше интервала [beg2,end2) по лексикографическому критерию.

О Первая форма сравнивает, элементы оператором <.

О Вторая форма сравнивает элементы бинарным предикатом op(elem1 ,elem2). Предикат возвращает true, если eleml меньше elem2.

О Лексикографическое сравнение означает, что интервалы сравниваются по парам элементов до тех пор, пока не будет выполнено одно из следующих условий:

□ если два элементы не равны, то результат их сравнения определяет результат всего сравнения;

□ интервал, содержащий меньшее количество элементов, считается меньше другого, то есть при достижении конца первого интервала результат сравнения считается равным true (первый интервал меньше второго);

□ если количество элементов в обоих интервалах одинаково, то интервалы Считаются равными, а результат сравнения равен false.

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

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

О Сложность линейная (пе более 2xmin(numberOfElements 1,numberOfElement2) сравнений или вызовов ор соответственно).

Пример лексикографической сортировки коллекций:

algo/lexicol.cpp Include "algostuff.hpp" using namespace std:

void prIntCollection (const I1st<int>8i 1) {

PRINTJLEMENTSO):

bool lessForCollection (const list<int>& 11. const list<int>& 12)

return lexicographicaljompare

(11.beginO. U.endO. Первый интервал 12.beginO. 12,end()): Второй интервал



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 [ 112 ] 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239