27. STL 범용 수치 알고리즘
by Qerogram* accumulate
- 지정한 구간에 속한 값들을 모든 더한 값을 계산한다.
- 기본적으로 더하기 연산만 하지만, 조건자를 이용시 이외의 연산 가능
- 헤더 <numeric>
- accumulate(구간, 구간, 구간에 있는 값에 더할 값, 조건자);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <vector> #include <iostream> #include <numeric> using namespace std; void print(vector<int> vec) { for(vector<int>::iterator IterPos = vec.begin(); IterPos!=vec.end(); ++IterPos) { cout << *IterPos << ", "; } cout << endl << endl; } int main() { vector<int> vec1; for(int i = 1; i < 5; ++i) vec1.push_back(i); print(vec1); int Result1 = accumulate(vec1.begin(), vec1.end(), 0); cout << Result1 << endl; int Result2 = accumulate(vec1.begin(), vec1.end(), 10); cout << Result2 << endl; return 0; } | cs |
# 결과
1, 2, 3, 4,
10
20
# 예시 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include <vector> #include <iostream> #include <numeric> using namespace std; struct USER { int UID; int Level; int Money; }; struct USER_MONEY_ADD { USER operator()(const USER& user1, const USER& user2) { USER user; user.Money = user1.Money + user2.Money; return user; } }; void print(vector<USER> vec) { for(vector<USER>::iterator IterPos = vec.begin(); IterPos!=vec.end(); ++IterPos) { cout << IterPos->Money << ", "; } cout << endl << endl; } int main() { USER User1; User1.Money=2000; User1.UID = 1; USER User2; User2.Money=2050; User2.UID = 2; USER User3; User3.Money=2200; User3.UID = 3; USER User4; User4.Money=1000; User4.UID = 4; USER User5; User5.Money=2030; User5.UID = 5; vector<USER> Users; Users.push_back(User1); Users.push_back(User2); Users.push_back(User3); Users.push_back(User4); Users.push_back(User5); print(Users); USER InitUser; InitUser.Money = 0; USER Result = accumulate(Users.begin(), Users.end(), InitUser, USER_MONEY_ADD()); cout << Result.Money << endl; return 0; } | cs |
# 결과
2000, 2050, 2200, 1000, 2030,
9280
* inner_product
- 두 입력 시퀀스의 내적을 계산하는 알고리즘으로 기본적으로는 +, *를 사용한다.
- 두 입력 시퀀스의 값은 위치의 값을 서로 곱한 값을 모두 더 한 것이 최종 계산값이 된다.
- 주의점은 두 입력 시퀀스의 구간 중 두번째 시퀀스는 첫번째 시퀀스 구간 보다 크거나 같아야한다.
- inner_product(시퀀스1 시작 반복자, 시퀀스1 끝 반복자, 시퀀스2 시작 반복자, Type _Val);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <vector> #include <iostream> #include <numeric> using namespace std; int main() { vector<int> vec1; for(int i = 1; i < 4; ++i) { vec1.push_back(i); } vector<int> vec2; for(int i = 1; i < 4; ++i) vec2.push_back(i); int Result = inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0 ); cout << Result << endl; return 0; } | cs |
# 결과
14
14 = 1*1+ 2*2+ 3*3이 수행된 것이다.
* 참고 : Thinking About C++ STL Programming
'코딩 > C&C++' 카테고리의 다른 글
#2. 소켓 프로그래밍으로 간단한 채팅프로그램 만들기 in C (0) | 2018.01.08 |
---|---|
#1. 소켓 프로그래밍 기초 in C (0) | 2018.01.08 |
26. STL 정렬 관련 알고리즘 (0) | 2017.04.22 |
25. STL 변경 가능 시퀀스 알고리즘 (0) | 2017.04.21 |
24. STL 변경 불가 시퀀스 알고리즘 (0) | 2017.04.21 |
블로그의 정보
Data+
Qerogram