Анимация
JavaScript
|
Главная Библионтека bacMnserter(coll2). Приемник b1nd2nd(multiplies<int>(),lO)); Операция PRINT ELEMENTS(coll2."coll2; "): Вывод злементов col 12 с изменением знака и в обратном порядке transforrr (coll2.rbegln(). coll2.rend(). Источник ostream iterator<int>(cout." "), Приемник negate<1nt>()); Операция cout « endl: Программа выводит следующий результат: colli: 123456789 negated: -1 -2 -3 -4 -5 -6 -7 -8 -9 C0112: -10 -20 -30 -40 -50 -60 -70 -80 -90 90 80 70 60 50 40 30 20 10 На с. 315 приведен пример обработки элементов с применением двух разных операций. Комбинирование элементов двух интервалов Outputlterator transforrr (Inputlteratorl sourceBeg, Inputlteratorl sourceSnd, InputIterator2 source2Beg. Outputlterator destBeg, BinaryFunc op) О Вызывает предикат op(souce1Elemource2Elem) для каждой пары соответствующих элементов интервалов [source 1Beg,source1 End) и [source2Beg,...) и записывает каждый результат в приемный интервал, начиная с позиции destBeg. О Возвращает позицию за последним преобразованным элементом в приемном интервале (то есть позицию первого элемента, не перезаписанного в результате операции). О Перед вызовом необходимо убедиться в том, что второй источник имеет достаточный размер (то есть содержит не меньше элементов, чем первый источник). О Перед вызовом необходимо убедиться в том, что приемный интервал имеет достаточный размер, или использовать итераторы вставки, О Позиции sourcelBeg, source2Beg и destBeg могут быть идентичными. Это означает, что вы можете вычислить комбинацию элементов самих с собой и записать результат на то же место. О Сложность линейная (numberOfElements вызовов ор{)). Следующая программа демонстрирует использование данной формы алгоритма transformO: dlgo/transf2.cpp #1nclude "algostuff,hpp" using narrespace std; int mainO { vector<int> colli; list<1nt> coll2; INSERT ELEMENTS(colll,1.9): PRINT ELEMENTS(col 11."col 11: "); Возведение элементов в квадрат transforrr (coin.beginO . colli.end( colli.beginO, coin.beginO, multiplies<int>()); PRINT ELEMENTS(col11."squared: "); Первый источник Второй источник Приемник Операция /* Сложить каждый элемент в порядке прямого перебора * с соответствующим элементом в порядке обратного перебора * и вставить результат в со112 */ transform (colli.beginO , colli,endO, Первый источник colli.rbeginO. Второй источник back inserter(coll2). Приемник plus<int>()); Операция PRINT ELEMENTS(coll2."coll2: "); Вывод разностей соответствующих элементов cout « "diff; ": transform (colli.beglnC). colli,endC). coll2.beginO. ostream iterator<int>(cout. " "). minus<int>()); cout « endl; Первый источник Второй источник Приемник Операция Результат выполнения программы выглядит так: colli: 12 3 4 5 6 7 8 9 squared; 1 4 9 16 25 36 49 64 81 Обмен интервалов ForwardIterator2 swap ranges (Forwardlteratorl begl. Forwardlteratorl endl ForwardIterator2 beg2) PRINT ELEMENTS(coll2."\ncoll2: О Меняет местами элементы интервала [beg1,end1) с соответствующими элементами интервала [beg2,...). О Возвращает позицию за последним переставленным элементом во втором интервале. О Перед вызовом необходимо убедиться в том, что второй интервал имеет достаточный размер, О Интервалы не должны перекрываться. О Для обмена элементов в контейнерах одного типа рекомендуется использовать функцию swapO класса контейнера, поскольку она обычно выполняется с постоянной сложностью (с. 241). О Сложность линейная (numberOfElements операций перестановки). Пример использования алгоритма swap ranges(): algo/swapl,срр #1nclude "algostuff-hpp" using namespace std: Int maInO ( vector<int> colli; deque<1nt> col 12; INSERT ELEMENTS(colll.l.9); INSERT ELEMENTS(coll2,U.23): PRINT ELEMENTS(colll."colli; "); PRINT ELEMENTS(coll2."coll2: "): Элементы colli меняются местами с соответствующими элементами со112 deque<int>:;1terator pos: pos = swap ranges (colU.beginO. colli.endO. Первый интервал С0112.beginO): Второй интервал PRINT ELEMENTS(col11,"\ncol 11: "): PRINT ELEMENTS(coll2."coll2; "); if (pos != coll2.end()) ( cout « "first element not modified: " « *pos « endl; Зеркальный обмен трех первых элементов со112 с тремя последними элементами swap ranges (со112.beginO. coll2.begin()+3, Первый интервал С0112.rbeginO); Второй интервал 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 |