[ Главная ] [ Гостевая ]

[ Назад ] [ Содержание ] [ Вперед ]

Руководство по стандартной библиотеке шаблонов (STL)

Алгоритмы

Обобщённые численные операции (Generalized numeric operations)

Накопление (Accumulate)

template <class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T init);

template <class InputIterator, class T, class BinaryOperation>
T accumulate(InputIterator first, InputIterator last, T init, 
	BinaryOperation binary_op);

     accumulate подобен оператору APL reduction и функции Common Lisp reduce, но он избегает трудности определения результата уменьшения для пустой последовательности, всегда требуя начальное значение. Накопление выполняется инициализацией сумматора acc начальным значением init и последующим изменением его acc = acc + *i или acc = binary_op(acc, *i) для каждого итератора i в диапазоне [first, last) по порядку. Предполагается, что binary_op не вызывает побочных эффектов.

Скалярное произведение (Inner product)

template <class InputIterator1, class InputIterator2, class T> 
T inner_product(InputIterator1 first1, InputIterator1 last1, 
	InputIterator2 first2, T init);

template <class InputIterator1, class InputIterator2, class T,
	class BinaryOperation1, class BinaryOperation2> 
T inner_product(InputIterator1 first1, InputIterator1 last1,
	InputIterator2 first2, T init,
	BinaryOperation1 binary_op1, BinaryOperation2 binary_op2);

     inner_product вычисляет свой результат, инициализируя сумматор acc начальным значением init и затем изменяя его acc = acc + (*i1) * (*i2) или acc = binary_op1 (acc, binary_op2 (*i1, *i2)) для каждого итератора i1 в диапазоне [first, last) и итератора i2 в диапазоне [first2, first2 + (last - first)) по порядку. Предполагается, что binary_op1 и binary_op2 не вызывают побочных эффектов.

Частичная сумма (Partial sum)

template <class InputIterator, class OutputIterator>
OutputIterator partial_sum(InputIterator first, InputIterator last, 
	OutputIterator result);

template <class InputIterator, class OutputIterator, class BinaryOperation> 
OutputIterator partial_sum(InputIterator first, InputIterator last, 
	OutputIterator result, BinaryOperation binary_op);

     partial_sum присваивает каждому итератору i в диапазоне [result, result + (last - first)) значение, соответственно равное ((...(*first + *(first + 1)) + ...) + *(first + (i - result))) или binary_op(binary_op(..., binary_op(*first, *(first + 1)), ...), *(first + (i - result))). Функция partial_sum возвращает result + (last - first). Выполняется binary_op точно (last - first) - 1 раз. Ожидается, что binary_op не имеет каких-либо побочных эффектов. result может быть равен first.

Смежная разность (Adjacent difference)

template <class InputIterator, class OutputIterator>
OutputIterator adjacent_difference(InputIterator first, InputIterator last, 
	OutputIterator result); 

template <class InputIterator, class OutputIterator, class BinaryOperation> 
OutputIterator adjacent_difference(InputIterator first, InputIterator last, 
	OutputIterator result, BinaryOperation binary_op);

     adjacent_difference присваивает каждому элементу, указываемому итератором i в диапазоне [result + 1, result + (last - first)) значение, соответственно равное *(first + (i - result)) - *(first + (i - result) - 1) или binary_op(*(first + (i - result)), *(first + (i - result) - 1)). Элемент, указываемый result, получает значение *first. Функция adjacent_difference возвращает result + (last - first). Применяется binary_op точно (last - first) - 1 раз. Ожидается, что binary_op не имеет каких-либо побочных эффектов. result может быть равен first.

[ Назад ] [ Содержание ] [ Вперед ]

[ Главная ] [ Гостевая ]


Топ Разработка игр