1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//C++ Листинг #1.1 accumulate сумма всех элементов #include <vector> #include <iostream> #include <numeric> using namespace std; int main(){ setlocale(LC_ALL, ""); vector<int> v = {2, 7, 8, 9}; int sum = accumulate(v.begin(), v.end(), 0); //Здесь ноль — это либо число, к которому нужно добавить результат сложения. cout << "Сумма элементов в массиве v == " << sum << '\n'; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//C++ Листинг #1.2 accumulate сумма всех элементов #include <set> #include <iostream> #include <numeric> using namespace std; int main(){ setlocale(LC_ALL, ""); set<int> s = {2, 7, 8, 9}; int sum = accumulate(s.begin(), s.end(), 0); cout << "Сумма элементов в множестве s == " << sum << '\n'; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//C++ Листинг #1.3 accumulate сумма всех элементов в массиве #include <iostream> #include <numeric> using namespace std; int foo(int *arr, const int N, const int value){ // return accumulate(begin(arr), end(arr), value); //ОШИБКА! return accumulate(arr, arr+N, value); //НАДО ТАК! } int main(){ setlocale(LC_ALL, ""); int arr1[] = {2, 7, 8, 9}; int arr2[] = {1, 2, 3, 4}; int sum1 = accumulate(begin(arr1), end(arr1), 0); //OK, можно выяснить на уровне итераторов границы массива int sum2 = foo(arr2, end(arr2) - begin(arr2), sum1); cout << "Сумма всех значений arr1 и arr2 == " << sum2 << '\n'; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//C++ Листинг #1.4 accumulate сумма всех элементов в массиве #include <iostream> #include <numeric> using namespace std; int main(){ setlocale(LC_ALL, ""); int arr1[] = {2, 7, 8, 9}; int arr2[] = {1, 2, 3, 4}; int sum1 = accumulate(begin(arr1), end(arr1), 0); //OK, можно выяснить на уровне итераторов границы массива int sum2 = accumulate(begin(arr2), end(arr2), sum1); //Добавляем к существующей сумме (sum1) вычисляемую сумму (sum2) cout << "Сумма всех значений arr1 и arr2 == " << sum2 << '\n'; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//C++ Листинг #2.1 accumulate умножение #include <iostream> #include <numeric> #include <vector> using namespace std; int foo(int x, int y){ //Предикатная функция, предназначенная для умножения return x * y; } int main(){ setlocale(LC_ALL, ""); vector<int> v= {2, 7, 8, 9}; if (! v.empty()){ int result = accumulate(begin(v), end(v), 1, foo); //OK, можно выяснить на уровне итераторов границы массива cout << "Произведение всех значений v == " << result << '\n'; } else { cout << "Нечего умножать!"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//C++ Листинг #2.2 accumulate умножение #include <iostream> #include <numeric> #include <vector> using namespace std; int main(){ setlocale(LC_ALL, ""); vector<int> v= {2, 7, 8, 9}; if (! v.empty()){ int result = accumulate(begin(v), end(v), 1, [](int x, int y){ return x * x; }); //OK, можно выяснить на уровне итераторов границы массива cout << "Произведение всех значений v == " << result << '\n'; } else { cout << "Нечего умножать!"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//C++ Листинг #2.3 accumulate умножение #include <iostream> #include <numeric> #include <vector> #include <functional> using namespace std; int main(){ setlocale(LC_ALL, ""); vector<int> v= {2, 7, 8, 9}; if (! v.empty()){ int result = accumulate(begin(v), end(v), 1, multiplies<int>()); //Использовали встроенный в С++ функтор для произведения cout << "Произведение всех значений v == " << result << '\n'; } else { cout << "Нечего умножать!"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//C++ Листинг #3.1 accumulate ошибка с типами #include <iostream> #include <numeric> #include <vector> using namespace std; int main(){ setlocale(LC_ALL, ""); vector<double> v= {2.7, 7}; // (2.7 + 7) = 9.7 cout << accumulate(v.begin(), v.end(), 0) << '\n'; // 9 (а ждём 9.7) } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//C++ Листинг #3.2 accumulate исправление ошибки с типами #include <iostream> #include <numeric> #include <vector> using namespace std; int main(){ setlocale(LC_ALL, ""); vector<double> v= {2.7, 7}; // (2.7 + 7) = 9.7 cout << accumulate(v.begin(), v.end(), static_cast<double>(0)) << '\n'; // Теперь всё ОК } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//C++ Листинг #4.1 accumulate нетипичные применения конкатенация строк #include <iostream> #include <numeric> #include <string> using namespace std; int main(){ setlocale(LC_ALL, ""); string S1 = "hello"; string S2 = "world"; cout << accumulate(S1.begin(), S1.end(), S2); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//C++ Листинг #4.2 accumulate нетипичные применения считаем число символов #include <iostream> #include <numeric> #include <string> using namespace std; int my_pred(int sum, const char ch){ if ('o' == ch){ //считаем число о sum++; }; return sum; } int main(){ setlocale(LC_ALL, ""); string S1 = "hello, mister coder"; cout << accumulate(S1.begin(), S1.end(), 0, my_pred); //o встретилась 2 раза } |
1 2 3 4 5 6 7 8 9 10 |
#include <numeric> #include <iostream> using namespace std; int main(){ string s = "78954"; //7 + 8 + 9 + 5 + 4 = 33 int sum = accumulate(s.begin(),s.end(), '0' * -s.size()) ; cout << sum << '\n'; } |
Подскажите где у меня ошипка
Вообще весь код — одна ошибка.
Может быть комментарий при передаче на сайт испортился?
Это разные пробы?
Что должно быть? Выделяйте код тегами [cpp][/cpp]
пробую разработать программу компютерная диагностики аудио видео радио аппаратуры пробую всавлять все
Такую программу этот сайт написать не поможет. И я помочь не могу.
Мне не написать какие алгоритмы надо и все остальное в этой программе должно быть
А эта функция работает для действительных чисел. Я просто попытался сложить действительные,получил сложение целых частей.
Можно делать так: