2011-10-09 3 views
1

C++의 알고리즘에 대해 배우기 시작했습니다. 내 책은 숫자 헤더에 정의 된 간단한 읽기 전용 알고리즘을 언급합니다. 세 개의 매개 변수를 취합니다. 첫 번째는 합계 범위를 지정하는 반복자이고 세 번째는 합계의 초기 값입니다. 그러나 나는이 작업을 수행 할 때 : (10), (46)가 어떻게 10에 1을 더한 46가 될 수 있습니다Accumulate algorithm incorrect sum

#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; 
} 

내가의 출력을 얻을? 통찰력 덕분에 여기에 내 오류를 볼 수 없습니다.

+0

10은 1과 46이 같지 않습니다. 첨가. –

+1

10과 1을 더하고 싶다면, 더 간단한 방법이 있습니다 :'int sum = 10 + 1;'. –

+1

@ R.MartinhoFernandes 더 단순한 것은'sum'에 ** 11 **을 할당하는 것입니다 : D – Mahesh

답변

6

을 얻을 추가 0-9 내부에있다. std :: accumulate는 요소 합계를 결과로 보냅니다. 자, 벡터는 0-9 숫자입니다. 따라서 0-9 숫자의 합은 45이며 1을 추가합니다 (알고리즘에 전달 된 세 번째 매개 변수는 결과가 1 임). 결과는 46.

+0

참으로 누적 값이 아닌 요소의 수를 합한 것입니다. –