#c
#c
Вопрос:
Только начал изучать алгоритмы на c . В моей книге упоминается простой алгоритм, доступный только для чтения, определенный в числовом заголовке. Он принимает три параметра: первый — это итераторы, которые задают диапазон или элементы для суммирования, а третий — начальное значение суммирования. Однако, когда я пытаюсь это сделать:
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;
int main() {
vector<int> numbers;
//Fill vector with numbers.
for (vector<int>::size_type i = 0; i != 10; i ) {
numbers.push_back(i);
}
int sum = accumulate(numbers.begin(), numbers.end(), 1);
cout << numbers.size() << endl;
cout << sum << endl;
system("PAUSE");
return 0;
}
Я получаю результат: 10, 46. Как 10 плюс 1 может быть 46? Я не вижу здесь своей ошибки, спасибо за понимание.
Комментарии:
1. 10 плюс 1 не равно 46. И это не то, что вы добавляете.
2. Если вы хотите добавить 10 и 1, есть более простой метод :
int sum = 10 1;
.3. @R.MartinhoFernandes Еще проще присвоить 11
sum
😀
Ответ №1:
http://www.cplusplus.com/reference/std/numeric/accumulate/
Ваш вектор содержит элементы 0-9 внутри, сумма которых равна 45. В качестве смещения к вашему аккумулятору вы добавляете 1. Поэтому вы получаете правильный результат 46.
Ответ №2:
Вы неправильно поняли алгоритм. std::accumulate выдает сумму элементов. Теперь вектор имеет 0-9 чисел. Итак, сумма чисел 0-9 равна 45, а добавление 1 (третий параметр, переданный алгоритму, равен 1 в вашем случае) к нему приводит к 46.
Комментарии:
1. да, я думал, что это суммирование количества элементов, а не кумулятивного значения.