도순씨의 코딩일지

C++ :: STL 수치 알고리즘 본문

𝐏𝐑𝐎𝐆𝐑𝐀𝐌𝐌𝐈𝐍𝐆/𝐂++

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, 한빛미디어.

 

Comments