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

1 ... 131 132 133 [ 134 ] 135 136 137 ... 239


Вывод всех частичных произведений

partial sum (coll.beginO, coll.endO, Источник

ostream iterator<int>(cout. ). Приемник niultiplies<int>()); Операция

cout endl;

Результат выполнения программы выглядит так:

1 2 3 4 5 6 1 3 6 10 15 21 1 2 6 24 120 720

Пример преобразования относительных значений в абсолютные и наоборот приведен также на с. 420.

Преобразование абсолютных значений в относительные

Outputlterator

adjacent difference (Inputlterator sourceBeg, Inputlterator sourceEnd.

Outputlterator destBeg)

Outputlterator

adjacent difference (Inputlterator sourceBeg, Inputlterator sourceEnd,

Outputlterator destBeg, BinaryFunc op)

О Первая форма вычисляет разность между каждым элементом в интервале [sourceBegySourceEnd) и его предшественником и записывает результат в приемный интервал [destBeg,..,).

О Вторая форма вызывает ор для каждого элемента в интервале [sourceBeg, sourceEnd) и его предшественника и записывает результат в приемный интервал [destBeg,...).

О Первый элемент просто копируется.

О Таким образом, пусть мы имеем следующие значения:

al а2 аЗ а4 ...

Для этих значений соответственно вычисляются и записываются такие величины:

al. а2 - al. аЗ - а2. а4 - аЗ. ... al. а2 ор al, аЗ ор а2, а4 ор аЗ...

О Обе формы возвращают позицию за последним записанным элементом в приемном интервале (то есть позицию первого элемента, который не был заменен).

О Первая форма эквтшалентна преобразовагшю серии абсолютных значений в серию относительных значений. В этом отношении алгоритм adjacent difference() является логическим дополнением алгоритма partiaLsum().

О Исходный и приемный интервалы могут быть идентичными.



О Перед вызовом необходимо убедиться в том, что приемный интервал имеет достаточный размер, или использовать итераторы вставки,

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

О Сложность линейная (numberOfElements-\ вызовов оператора - или орО соответственно).

Пример использования алгоритма adjacent difference():

algo/adjdiffl.cpp #include algostuff.hpp using namespace std;

int mainO {

deque<int> coll;

INSERT ELEMENTS(coll.l.6); PRiNTJLEMENTSCcoll):

Вывод разностей между элементами

adjacentjifference (coll,beginO, coll.endO. Источник

ostrea[njterator<lnt>(cout. )); Приемник

cout endl;

Вывод сумм элементов с их предшественниками adjacent difference (coll.beginO, coll.endO,

ostreainjterator<int>Ccout.

plus<int>());

cout endl:

Источник приемник Операция

Вывод произведения элемента и его предшественника adjacentjifference (coll,beginO, coll.endO. Источник

ostreamjterator<int>(cout, ), Приемник multiplies<int>0): Операция

cout endl;

Результат выполнения программы выглядит так:

1 2 3 4 5 6 111111

1 3 5 1 2 б

7 9 11 12 20 30

Далее приведен еще один пример преобразования относительных значений в абсолютные.

Пример преобразования относительных значений в абсолютные

Следующий пример показывает, как при помощи алгоритмов partiaLsum() и adjacent difference() преобразовать серию относительных значений в серию абсолютных значений и наоборот:



algo/relabs.cpp #1nclude algostuff.hpp using namespace std:

int malnO

vector<int> col 1:

coll.push back(17) coll.push back(-3) coll.push back(22) coll.pu5h back(13) coll.push back(13) col 1.push back(-9) PRINT ELEMENTSCcoll

coll:

Преобразование к относительным значениям adjacent difference Ccoll.beglnO. coll.endO. Источник

coll .beginO): Приемник

PRINTJLEMENTSCcoll, relative: );

Преобразование к абсолютным значениям partial sum (coll.beginO. coll.endO. Источник

coll.beginO); Приемник

PRINT ELEMENTSCcoll. absolute: ):

Результат выполнения программы выглядит так:

соП: relative:

absolute:

17 -3 22 13 13 -9 17 -20 25 -9 О -22 17 -3 22 13 13 -9



1 ... 131 132 133 [ 134 ] 135 136 137 ... 239

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