![]() |
|
Программирование >> Операторы преобразования типа
Преобразование элементов Outputlterator transform (Inputlterator sourceBeg, Inputlterator sourceEnd. Outputlterator destBeg. UnaryFunc op) О Вызывает предикат op{elem) для каждого элемента в исходном интервале [sourceBegySourceEnd) и записывает каждый результат ор в приемный интервал, начиная с destBeg: О Возвращает позицию за последним преобразованным элементом в приемном интервале (то есть позицию первого элемента, не перезаписанного в результате операции). О Перед вызовом необходимо убедиться в том. что приемный интервал имеет достаточный размер, или использовать итераторы вставки. О Позиции sourceBeg и destBeg могут быть идентичными. Это означает, что алгоритм transformO, как и for each(), может использоваться для модификации элементов внутри интервала. Пример для алгоритма for eachO приведен на с. 325. О Чтобы заменить заданной величиной элементы, удовлетворяющие критерию, используйте алгоритм replaceO (см. с. 369). О Сложность линейная {numberOfElements присваиваний). Следующая программа демонстрирует использование данной формы алгоритма transfoHTiO: algo/transfl.cpp #include algostuff.hpp using narrespace std: 1nt mainO { vector<int> colli; list<int> C0112: INSERT ELEMENTS(colU,l,9); PRINT ELEMENTS(col11. colli: ); Изменение знака всех элементов colli transform (colli.beginO. colli.endO. Источник colli.beginO. Приемник negate<int>()): Операция PRINT ELEMENTS(col11. negated: ): Копирование злементов colli, умноженных на 10. в col 12 transform (col U.beginO. col U.endO. Источник 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 -ВО -90 90 ВО 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 (colli.beg1n(). colli.end( colli.beginO, colli.beginO, multipl1es<int>()); PRINT ELEMENTS(col11. squared: ); Первый источник Второй источник Приемник Операция /* Сложить каждый элемент в порядке прямого перебора * с соответствующим элементом в порядке обратного перебора * и вставить результат в со112 */ transform (colli.beginO , colli,endO, Первый источник colli.rbeginO. Второй источник back lnserter(coll2). Приемник plus<int>()): Операция PRINT ELEMENTS(coll2. coll2: ): Вывод разностей соответствующих элементов cout diff: : transform (colli.beginC). colli,endO. coll2.beginO. ostream iterator<int>(cout. ). minus<1nt>()): cout endl: Первый источник Второй источник Приемник Операция Результат выполнения программы выглядит так: colli: 12 3 4 5 6 7 8 9 squared; 1 4 9 16 25 36 49 64 81 Обмен интервалов ForwardIterator2 swap rdnges (Forwardlteratorl begl. Forwardlteratorl endl ForwardIterator2 beg2)
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |