Программирование >>  Операторы преобразования типа 

1 ... 112 113 114 [ 115 ] 116 117 118 ... 239


Преобразование элементов

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)



1 ... 112 113 114 [ 115 ] 116 117 118 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика