𝐏𝐑𝐎𝐆𝐑𝐀𝐌𝐌𝐈𝐍𝐆/𝐂++
C++ :: STL 수치 알고리즘
도순씨
2020. 9. 28. 00:00
다음 예제는 순차열 모든 원소의 합을 구하는 예제입니다.
⭐️ accumulate() 알고리즘
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
|
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main(void){
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(50);
cout << "v: ";
for(vector<int>::size_type i = 0 ; i < v.size() ; ++i)
cout << v[i] << " ";
cout << endl;
// 0 + 10 + 20 + 30 + 40 + 50
cout << accumulate(v.begin(), v.end(), 0) << endl;
// 100 + 10 + 20 + 30 + 40 + 50
cout << accumulate(v.begin(), v.end(), 100) << endl;
return 0;
}
|
cs |
⭐️ accumulate() 알고리즘 실행결과
1
2
3
|
v: 10 20 30 40 50
150
250
|
cs |
inner_product() 는 두 순차열의 모든 원소의 곱의 합을 구합니다.
⭐️ inner_product()
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
|
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main(void){
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
vector<int> v2;
v2.push_back(2);
v2.push_back(2);
v2.push_back(2);
v2.push_back(2);
v2.push_back(2);
// 0 + 1 * 2 + 2 * 2 + 3 * 2 + 4 * 2 + 5 * 2
cout << inner_product(v1.begin(), v1.end(), v2.begin(), 0) << endl;
// 100 + 1 * 2 + 2 * 2 + 3 * 2 + 4 * 2 + 5 * 2
cout << inner_product(v1.begin(), v1.end(), v2.begin(), 100) << endl;
return 0;
}
|
cs |
⭐️ inner_product() 실행결과
1
2
3
|
v: 10 20 30 40 50
150
250
|
cs |
adjacent_difference() 는 모든 인접 원소의 차를 순차열에 저장합니다.
⭐️ adjacent_difference() 알고리즘
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
|
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main(void){
vector<int> v1;
v1.push_back(10);
v1.push_back(20);
v1.push_back(30);
v1.push_back(40);
v1.push_back(50);
cout << "v1 : ";
for(vector<int>::size_type i = 0 ; i < v1.size() ; ++i)
cout << v1[i] << " ";
cout << endl;
vector<int> v2(5);
vector<int>::iterator iter_end;
iter_end = adjacent_difference(v1.begin(), v1.end(), v2.begin());
cout << "v2 : ";
for(vector<int>::size_type i = 0 ; i < v2.size() ; ++i)
cout << v2[i] << " ";
cout << endl;
return 0;
}
|
cs |
⭐️ adjacent_difference() 알고리즘 실행결과
1
2
|
v1 : 10 20 30 40 50
v2 : 10 10 10 10 10
|
cs |
partial_sum()은 순차열에서 현재 원소까지의 합을 도출합니다.
⭐️ partial_sum() 알고리즘
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
|
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main(void){
vector<int> v1;
v1.push_back(10);
v1.push_back(20);
v1.push_back(30);
v1.push_back(40);
v1.push_back(50);
cout << "v1 : ";
for(vector<int> :: size_type i = 0 ; i < v1.size() ; ++i)
cout << v1[i] << " ";
cout << endl;
vector<int> v2(5);
vector<int>::iterator iter_end;
iter_end = partial_sum(v1.begin(), v1.end(), v2.begin());
cout << "v2 : ";
for(vector<int>::size_type i = 0 ; i < v2.size() ; ++i)
cout << v2[i] << " ";
cout << endl;
return 0;
}
|
cs |
⭐️ partial_sum() 알고리즘 실행결과
1
2
|
v1 : 10 20 30 40 50
v2 : 10 30 60 100 150
|
cs |
📚 출처
공동환(2012), 뇌를 자극하는 C++ STL, 한빛미디어.