|
Программирование >> Операторы преобразования типа
Вывод всех частичных произведений 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
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |