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

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


Глава 9.

Алгоритмы STL

Таблица 9.8. Численные алгоритмы

Название

Описание

Страиица

accumulateO

Объединяет все значения элементов (вычисляет сумму.

произведение и т. д.)

inner product()

Объединяет все элементы двух интервалов

adjacent difference()

Объединяет каждый элемент с его предшественником

partiaLsumO

Объединяет каждый элемент со всеми предшественниками

Вспомогательные функции

В оставшейся части этой главы приводятся подробные описаиия всех алгоритмов. Для каждого алгоритма дается минимум один пример. Следующие вспомогательные функции упрощают код примеров, чтобы читатель мог сосредоточиться на наиболее содержательных аспектах:

algo/algostuff,hpp #Tfndef ALGOSTUFF HPP fdefine ALGOSTUFF HPP

finclude <iostream> finclude <vector> fmclude <deque> #1nclude <llst> #1nclude <set> include <map> #1nclude <string> #1nclude <algorithni> finclude <functional> #1nclude <numer1c>

/* PRINTJLEMENTSO

* - вывод необязательной строки С. за которой выводятся

* - все злементы коллекции coll. разделенные пробелами. */

template <cla5s Т>

inline void PRINTJLEMENTS (const T& coll, const char* optcstr= ) {

typename T::const 1terator pos: std::cout optcstr:

for (pos-col1.beginO: pos!=coll,end(): ++pos) { std::cout *pos ;

std: xout std;:endl;



/* INSERTJLEMENTS (collection, first, last)

* - заполнение коллекции значениями от first до last

* - ВНИМАНИЕ; интервал НЕ ЯВЛЯЕТСЯ полуоткрытым */

template <class Т>

inline void INSERTJLEMENTS (Т& coll. int first, int last) {

for (1nt 1=first; 1<=last: ++i) { coll лnsert(coll .endO .1):

#endif /*ALGOSTUFF HPP*/

Сначала в файл agostuff.hpp включаются все заголовочные файлы, которые могут быть задействованы в примерах, чтобы их не пришлось включать отдельно. Затем определяются две вспомогательные функции.

О Функция PRINT ELEMENTS() выводит все элементы контейнера, переданного в первом аргументе, разделяя их пробелами. Второй необязательный аргумент определяет префикс - строку, которая будет выводиться перед элементами (см. с. 128).

О Функция INSERT ELEMENTS() вставляет элементы в контейнер, переданный в первом аргументе. Элементам присваиваются значения в интервале, гратш-цы которого определяются вторым и третьим аргументами. В данном случае включаются оба аргумента (поэтому интервал не является полуоткрытым).

Алгоритм for each

Алгоритм for each() обладает чрезвычайно гибкими возможностями. С его помощью можно производить разнообразную обработку и модификацию каждого элемента.

UnaryProc

for each (Inputlterator beg. Inputlterator end, UnaryProc op)

О Вызывает унарный предикат op{elem) для каждого элемента elem в интервале [beg,end).

О Возвращает копию ор (измененную в процессе выполнения).

О Операция ор может модифицировать элементы. На с. 325 алгоритм for each() сравнивается с алгоритмом transformO. который решает ту же задачу, но несколько иным способом.

О Возвращаемые значения ор игнорируются.

О Реализация алгоритма for each() приведена на с. 135.

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

В следующем примере алгоритм for each() вызывает для каждого элемента функцию print(), которая выводит текущее значение элемента.



algo/foreachl.cpp #lnclude algostuff.hpp using namespace std:

Функция, вызываемая для каждого элемента void print (int elem)

cout elem :

int mainO {

vector<int> coll:

INSERT ELEMENTS(coll.l.9):

call printO for each element for each (coll,beginO. coll.endO. Интервал print): Операция

cout endl:

Программа выводит следующий результат: 123456789

Чтобы вызвать для каждого элемента функцию его класса, необходимо использовать адаптеры mem fun. За подробностями и примерами обращайтесь на с. 307.

В следующем примере объект функции модифицирует элементы в процессе перебора:

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

Объект функции прибавляет к значению элемента приращение. заданное при его инициализации template <class Т> class AddValue {

private: Т theValue: Приращение

public:

Конструктор инициализирует приращение AddValue (const Т& v) : theValue(v) { }

Суммирование выполняется вызовом функции для элемента void operatorO (Т& elem) const { elem += theValue:



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

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