본문 바로가기

[ C/ C++ 프로그래밍 ]/[ STL ]

[ 혼연 정리 ] STL 알고리즘 - 7 [ 변경 알고리즘 ]


◎ 요소 변경

ㅇ fransform()
- 함수 객체를 적용한 후 그 결과를 다른 구간에 복사한다.
- 단항 함수를 취하는 버젼과 이항 함수를 취하는 버젼 두가지가 있다.

OutIt transform(InIt first, InIt last, OutIt result, UniOp op);
OutIt transform(InIt1 first1, InIt1 last1, InIt2 first2, OutIt result, BinOp op);

 - 단항 함수 : 반복자 구간의 요소를 이 함수로 넘겨 리턴된 값을 result 반복자 위치에 대입한다.
 - 이항 함수 : 두 반복자 구간의 대응되는 값을 함수로 념겨 리턴되는 값을 result 반복자 위치에 대입한다.
 - 처리한 결과는 result로 출력하기 때문에 원본이 그래도 유지된다. (result가 원본이 될수도 있다.)

 1 #include <iostream>
2 #include <vector>
3 #include <algorithm>
4 #include <functional>
5
6 using namespace std;
7
8 template<typename C>
9 void dump(const char *desc, C c) 10 {
11     cout.width(12);cout << left << desc << "==> ";
12     copy(c.begin(),c.end(),ostream_iterator<typename C::value_type>(cout," "));
13     cout << endl;
14 }
15
16
17 int multi2(int a)
18 {
19      return a*2;
20 }
21
22 int add(int a, int b)
23 {
24      return a+b;
25 }
26
27 void main()
28 {
29      vector<int> src(5), dest(5), sum;
30      int i;
31
32      for (i=0;i<5;i++) src[i]=i;
33      transform(src.begin(),src.end(),dest.begin(),multi2);
34      dump("src",src);
35      dump("dest",dest);
36      transform(src.begin(),src.end(),dest.begin(),back_inserter(sum),add);
37      dump("sum",sum);
38 }