| ||||||||||
1 Introduction #STL의 Container (std::list, std::vector, etc)들의 모든 elements를 변환할 때 사용한다 (의미하는 그대로). algorithm에 포함된 것 답게 unary (단항) operator나 binary (이항) operator를 parameter로 받아서 처리해준다. 즉, std::vector의 모든 elements를 1씩 증가 시켜주거나 prefix로 특정 문자를 붙이는 경우 사용할 수 있을 것이다. 2 Signature #다음과 같이 두 가지 원형을 제공한다. template < class InputIterator, 첫 번째 것은 단항 연산자를 이용해서 입력으로 들어오는 container의 처음과 끝 iterator를 처리해주고 결과를 output conatiner의 iterator에서 차례로 넣어 준다. 두 번째 것은 이항 연산자를 이용해서 첫 번째 container (first1 ~ last1)와 두 번째 container의 시작 (frist2) 부터를 처리해서 output containter의 iterator에 차례로 넣어 준다. 3 Inside #Visual C++ 6.0은 위 두 개 원형을 다음과 같이 구현해두었다. 설명 그대로이다. // TEMPLATE FUNCTION transform WITH UNARY OP template<class _II, class _OI, class _Uop> inline _OI transform(_II _F, _II _L, _OI _X, _Uop _U) {for (; _F != _L; ++_F, ++_X) *_X = _U(*_F); return (_X); } // TEMPLATE FUNCTION transform WITH BINARY OP template<class _II1, class _II2, class _OI, class _Bop> inline _OI transform(_II1 _F1, _II1 _L1, _II2 _F2, _OI _X, 4 Usgae #다음의 간단한 예는 10,20,30,40,50이 elements로 들어있는 vector를 unary operator를 이용해서 1씩 증가시키고 binary operator를 이용해서 최초 vector와 1씩 증가한 vector를 더하는 예이다. #include <iostream> #include <algorithm> #include <vector> // 1씩 증가 시키는 unary operator int op_increase (int i) { return ++i; } // 두 수를 더하는 binary operator int op_sum (int i, int j) { return i+j; } int main () { std::vector<int> first; std::vector<int> second; std::vector<int>::iterator it; // 첫 번째 container // 10, 20, 30, 40, 50 for (int i=1; i<6; i++) first.push_back (i*10); // 두 번째 container size 할당 second.resize(first.size()); // usage 1 // 첫 번째 container의 elements를 // op_increase unary operator를 이용해서 // 1씩 증가 // 결과 11, 21, 31, 41, 51 std::transform (first.begin(), first.end(), second.begin(), op_increase); // usage 2 // 첫 번째 container의 elements와 // usgae 1의 결과 container를 // op_sum인 binary operator를 이용해서 // 더함 // 결과 21, 41, 61, 81, 101 std::transform (first.begin(), first.end(), second.begin(), first.begin(), op_sum); // 결과 출력 std:: cout << "first contains:"; for (it=first.begin(); it!=first.end(); ++it) std::cout << " " << *it; std::cout << std::endl; return 0; } 6 See Alos # |

![[http]](http://alones.byus.net/moniwiki/imgs/http.png)