Простейшим и наиболее полезным численным алгоритмом является алгоритм accumulate(). В простейшем варианте он суммирует значения, принадлежащие последовательности.
template T accumulate(In first, In last, T init)
{
while (first!=last) {
init = init + *first;
++first;
}
return init;
}
Также возможно вы думаете, что такая тема как http://dverexpo.ru/massivnye-dveri.html никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт dverexpo.ru - там можно узнать много интересного про то, где есть двери из массива, и сколько стоит двери из массива.
Что означает вообще резина двери из массива, где купить двери из массива - про это написано на сайте dverexpo.ru про двери из массива.
Это важная для многих тема - двери из массива Спасибо сайту dverexpo.ru за информацию про двери из массива
Получив начальное значение init, он просто добавляет к нему каждое значение из последовательности [first:last) и возвращает сумму. Переменную init, в которой накапливается сумма, часто называют аккумулятором (accumulator). Рассмотрим пример.
int a[] = { 1, 2, 3, 4, 5 };
cout << accumulate(a, a+sizeof(a)/sizeof(int), 0);
Этот фрагмент кода выводит на экран число 15, т.е. 0+1+2+3+4+5 (0 является начальным значением). Очевидно, что алгоритм accumulate() можно использовать для всех видов последовательностей. void f(vector& vd, int* p, int n)
{
double sum = accumulate(vd.begin(), vd.end(), 0.0); int sum2 = accumulate(p,p+n,0);
}
Тип результата (суммы) совпадает с типом переменной, которую алгоритм accu- mulate() использует в качестве аккумулятора. Это обеспечивает высокую степень гибкости которая может играть важную роль. Рассмотрим пример. void f(int* p, int n)
{
int s1 = accumulate(p, p+n, 0); // суммируем целые числа в int
long sl = accumulate(p, p+n, long(0)); // суммируем целые числа
// в long
772
double s2 = accumulate(p, p+n, 0.0); // суммируем целые числа
// в double
}
На некоторых компьютерах переменная типа long состоит из гораздо большего количества цифр, чем переменная типа int. Переменная типа double может представить большие (и меньшие) числа, чем переменная типа int, но, возможно, с меньшей точностью. В главе 24 мы еще вернемся к вопросу о диапазоне и точности в вычислениях.
Использование переменной init в качестве аккумулятора представляет собой весьма распространенную идиому, позволяющую задать тип аккумулятора. void f(vector& vd, int* p, int n)
{
double s1 = 0;
s1 = accumulate(vd.begin(), vd.end(), s1);
int s2 = accumulate(vd.begin(), vd.end(), s2); // ой
float s3 = 0;
accumulate(vd.begin(), vd.end(), s3); // ой
}
lyl
Не забудьте инициализировать аккумулятор и присвоить результат работы алгоритма accumulate() какой-нибудь переменной. В данном примере в качестве инициализатора использовалась переменная s2, которая сама еще не получила начальное значение до вызова алгоритма; результат такого вызова будет непредсказуем. Мы передали переменную s3 алгоритму accumulate() (по значению;, но результат ничему не присвоили; такая компиляция представляет собой простую трату времени.
|