Итак, основной алгоритм accumulate() с тремя аргументами выполняет суммирование. Однако существует много других полезных операций, например умножение и вычитание, которые можно выполнять над последовательностями, поэтому в библиотеке STL предусмотрена версия алгоритма accumulate() с четырьмя аргументами, позволяющая задавать используемую операцию.
Также возможно вы думаете, что такая тема как ипотечный калькулятор никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт calculator-ipoteka.ru http://calculator-ipoteka.ru/ там представлен в широком ассортименте. Там можно узнать много интересного про ипотечный калькулятор, и сколько стоит ипотечный калькулятор.
Что означает вообще ипотечный калькулятор, где ипотечный калькулятор - про это написано на сайте calculator-ipoteka.ru про ипотечный калькулятор .
Это важная для многих тема - ипотечный калькулятор Спасибо сайту calculator-ipoteka.ru за информацию про ипотечный калькулятор
template
T accumulate(In first, In last, T init, BinOp op)
{
while (first!=last) {
init = op(init, *first);
++first;
}
return init;
}
Здесь можно использовать любую бинарную операцию, получающую два аргумента, тип которых совпадает с типом аккумулятора. Рассмотрим пример.
array a = { 1.1, 2.2, 3.3, 4.4 }; // cout << accumulate(a.begin(),a.end(), 1.0, multiplies());
Этот фрагмент кода выводит на печать число 35.1384, т.е. 1.0*1.1*2.2*3.3*4.4 (1.0 — начальное значение). Бинарный оператор multiplies(), передаваемый как аргумент, представляет собой стандартный объект-функцию, выполняющий умножение; объект-функция multiplies перемножает числа типа double, объект-функция multiplies перемножает числа типа int и т.д. Существуют и другие бинарные объекты-функции: plus (сложение), minus (вычитание), divides и modulus (вычисление остатка от деления). Все они определены в заголовке .
Обратите внимание на то, что для умножения чисел с плавающей точкой естест-
• венным начальным значением является число 1.0. Как и в примере с алгоритмом sort(), нас часто интересуют данные, хранящиеся в объектах классов, а не обычные данные встроенных типов. Например, мы могли бы вычислить общую стоимость товаров, зная стоимость их единицы и общее количество.
struct Record {
double unit_price;
int units; // количество проданных единиц // . . .
};
Мы можем поручить какому-то оператору в определении алгоритма accumulate извлекать данные units из соответствующего элемента класса Record и умножать на значение аккумулятора.
double price(double v, const Record& r)
{
return v + r.unit_price * r.units; // вычисляет цену
// и накапливает итог
}
void f(const vector& vr)
{
double total = accumulate(vr.begin(), vr.end(), 0.0, price);
// . . .
}
Мы поленились и использовали для вычисления цены функцию, а не объект- функцию, просто, чтобы показать, что так тоже можно делать. И все же мы рекомендуем использовать объекты функции в следующих ситуациях.
• Если между вызовами необходимо сохранять данные.
• Если они настолько короткие, что их можно объявлять подставляемыми (по крайней мере, для некоторых примитивных операций).
В данном случае мы могли бы использовать объект-функцию, руководствуясь вторым пунктом этого списка.
Определите класс vector, проинициализируйте его четырьмя записями по своему выбору и вычислите общую стоимость, используя приведенные выше функции.
|