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

1 ... 103 104 105 [ 106 ] 107 108 109 ... 239


int mainO {

vector<int> col 1;

INSERT ELEMENTS(coll,1.9);

Прибавить к каждому элементу 10 for each (coll.beginO. coll.endO. Интервал

AddValue<int>(10)); Операция

PRINT ELEMENTS(coll):

Прибавить к каждому элементу значение первого злемента for each (coll.beginO, coll.endO. range

Add\/alue<int>(*coll,beginO)); operation PRlNT ELEMENTS(coll):

Класс AddValueO определяет объекты функций, которые прибавляют к каждому элементу приращение, переданное при вызове конструктора. Используя объект функции, вы сможете определить величину приращения на стадии выполнения программы. Результат выполнения программы выглядит так:

11 12 13 14 15 16 17 18 19 22 23 24 25 26 27 28 29 30

Подробное описание этого примера приведено на с. 138. Задача также решается при помощи алгоритма transform() (см. с. 363):

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

coll .beginO , Приемник

bind2nd(plus<1nt>0.10)); Олерация

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

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

bind2nd(plus<int>0 ,*coll .beginO)): Операция

Ha c. 325 приведен общий сравнительный анализ алгоритмов for each() и transformO.

В третьем примере используется значение, возвращаемое алгоритмом for each(). Особое свойство for each() - возвращение выполняемой операции - позволяет выполнить необходимые вычисления и вернуть результат в объекте функции.

algo/foreachS.cpp #1nclude algostuff,hpp using namespace std;

Объект функции для вычисления среднего арифметического class MeanValue { private:

long num: Счетчик элементов

long sum; Сумма всех значений элементов



public: Конструктор

MeanValue О : num(O) 5Ufn(0) { }

Вызов функции

- о&ра&отка очередного элемента последовательности void operator!) (Int elem) {

num++; Увеличение счетчика

sum += elem; Прибавление значения

Возвращение среднего арифметического (с неявным преобразованием типа) operator doubleO {

return static cast<double>(sum) / static cast<double>(num);

int mainO {

vector<int> coll:

INSERT ELEMENTS(coll.l.8);

Вычисление и вывод среднего арифметического double mv = for each (coll,beginO. coll.endO. Интервап

MeanValueO): Операция

cout mean value: mv endl;

Программа выводит следующий результат: mean value: 4,5

Этот пример, хотя и в слегка измененной форме, подробно рассматривается иа с. 301.

Немодифицирующие алгоритмы

Алгоритмы, описанные в этом разделе, работают с элементами, не изменяя их значений или порядка следования.

Подсчет элементов

d1 f ference J:ype

count (Inputlterator beg. Inputlterator end. const value) dlfference type

count if (Inputlterator beg. Inputlterator end. UnaryPredicate op)



О Первая форма подсчитывает элементы с заданным значением в интервале [begend).

О Вторая форма подсчитывает в интервале [beg,end) элементы, для которых унарный предикат ор(е1.ет) возврашает true.

О Тип возвращаемого значения difference tyре представляет тип разности итераторов:

typename iterator tra1ts<lnputlterator>;:difference type

Структура iterator traits описана на с. 288.

О Предикат ор не должен изменять свое состояние во время вызова. За подробностями обращайтесь на с. 303.

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

О В классах ассоциативных контейнеров (множества, мультимножества, отображения и мультиотображения) определена похожая функция count() для подсчета элементов с заданным ключом (см. с. 239).

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

Пример подсчета элементов по разным критериям:

algo/countl.cpp finclude algostuff.hpp using namespace std:

bool IsEven (lnt elem) {

return elem X 2 == 0:

1nt maln()

vector<1nt> col 1: lnt num;

lNSERT ELEMENTS(coll.1.9): PRINT ELEMENTS(coll. coll: ):

Подсчет элементов со значением 4 num = count (coll.beginO. coll.endO. 4):

cout number of elements equal to 4:

Интервал Значение num endl;

Подсчет четных элементов

num = count if (coll.beginO. coll.endO. Интервал

isEven); Критерий

cout number of elements with even value: num endl:

Подсчет элементов со значениями, большими 4 num = countjf (coll.beginO. coll.endO. Интервал b1nd2nd(greater<1nt>0,4)): Критерий



1 ... 103 104 105 [ 106 ] 107 108 109 ... 239

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