Анимация
JavaScript
|
Главная Библионтека void replace if (Forwardlterator beg. Forwardlterator end. UnaryPredicate op. const T& newValue) О Алгоритм гер1асе() заменяет все элементы интервала [beg,end), равные oldValue, значением newValue. О Алгоритм replace if() заменяет все элементы интервала [beg,end), для которых унарный предикат ор(е1етп) возвращает true, значением newValue. О Предикат ор не должен изменять свое состояние во время вызова. За подробностями обращайтесь на с. 303. О Сложность линейная (numberOfElements сравнений или вызовов ор соответственно). Пример использования алгоритмов гер1асе() и replace if(). algo/replacel.cpp include "algostuff,hpp" using namespace std; int mainO list<int> coll: INSERT ELEMENTS(coll.2.7) INSERT ELEMENTS(coll.4.9) PRINT ELEMENTS(coll."coll Замена всех элементов, равных 6. значением 42 replace (coll.beginO. coll.endO. Интервал 6. Старое значение 42): Новое значение PRINTJLEMENTSCcoll. "coll: "); Замена всех элементов, меньших 5. значением О replace 1f (coll.beginO. coll.endO. Интервал bind2nd(less<1nt>0.5). Критерий замены 0); Новое значение PRINT ELEMENTS(coll."coll; "): Результат выполнения программы выглядит так: coll coll coll 234567456789 2 3 4 5 42 7 4 5 42 7 8 9 О О О 5 42 7 О 5 42 7 8 9 Замена при копировании Outputlterator replacejopy (Inputlterator sourceBeg. Inputlterator sourceEnd. Outputlterator destBeg. const T& oldValue, const T& newValue) Outputlterator rGplace copy if (Inputlterator sourceBeg. Inputlterator sourceEnd. Outputlterator destBeg. UnaryPredicate op. const T& newValue) О Алгоритм гер1асе сору() является объединением алгоритмов сору() и гер1асе(). Он заменяет каждый элемент интервала [beg,end), равный oldValue, значением newValue в процессе копирования элементов в приемный интервал, начинающийся с позиции destBeg. О Алгоритм гер1асе соруЛ() является объединением алгоритмов сору() и replace. if(). Он заменяет каждый элемент интервала [beg,end), для которого унарный предикат opieleni) возвращает true, значением newValue. Замена производится в процессе копирования элементов в приемный интервал, начинающийся с позиции destBeg. О Оба алгоритма возвращают позицию за последним скопированным элементом в приемном интервале (то есть позицию первого элемента, который не был заменен в ходе копирования). О Предикат ор не должен изменять свое состояние во время вызова. За подробностями обращайтесь на с. 303. О Перед вызовом необходимо убедиться в том, что приемный интервал имеет достаточный размер, или использовать итераторы вставки. О Сложность линейная {numberOfElements сравнений или вызовов ор и присваиваний соответственно). Пример использования алгоритмов гер1асе сору() и replace copy if(): algo/replace2.cpp #include "algostuff.hpp" using namespace std: int mainO ( list<int> coll: INSERTJLEMENTS(co11.2.6): INSERT ELEMENTS(coll.4.9); PRINT ELEMENTS(COll); Вывод коллекции, в которой все элементы, равные 5. заменены значением 55 гер1асе сору(со11 .begin(). coll.endO. Источник ostream iterator<int>(cout." "). Приемник 5. Старое значение 55): Новое значение cout « endl: Вывод коллекции, в которой все элементы, меньшие 5, заменены значением 42 print all elements with a value less than 5 replaced with 42 replace copy if(coll .beginO . coll.endO. Источник ostream iterator<1nt>(cout." "). Приемник bind2nd(less<1nt>().5), Критерий замены 42); Но8ое значение cout « endl; Вывод коллекции, в которой все нечетные элементы заменены нулями replace copy 1f(coll .beginO . coll.endO. Источник ostream iterator<int>(cout," "). Приемник b1nd2nd(modulus<1nt>0.2), Критерий замены 0); Новое значение cout « endl; Результат выполнения программы выглядит так: 23456456789 2 3 4 55 6 4 55 б 7 8 9 42 42 42 5 6 42 5 6 7 8 9 20406406080 лгоритмы удаления Следующие алгоритмы удаляют элементы из интервала по задщпюму значению или критерию. Однако следует помнить, что эти алгоритмы пе могут изменить количество элементов. Они всего лишь заменяют «удаленные» элементы следующими элементами, которые не были удалены, и возвращают новый логический конец интервала (позицию за последним элементом, который не был удален). За подробностями обращайтесь на с. 122. /даление элементов с заданным значением Удаление элементов в интервале Forwardlterator remove (Forwardlterator beg, Forwardlterator end. const T& value) Forwardlterator remove 1f (Forwardlterator beg. Forwardlterator end. UnaryPredicate op) О Алгоритм removeO удаляет в интервале [beg,end) все элементы, значение которых равно value. О Алгоритм remove if() удаляет в интервале [beg,end) все элементы, для которых унарный предикат ор{е1ет) возвращает true. 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 |