인수나 반환 값의 형을 모호한 상태로 정의하는 함수
복수의 형에 대응하는 함수를 만들 수 있다.
컴파일러는 템플릿 함수를 호출하는 부분을 발견하면, 이것들을 구체적인 함수로 만든다.
template<class T>
T GetMax(T a, T b)
{
T buf ;
...
여기서 class T 는 템플릿 인수이다. 임의의 형명임.
int 나 double 형으로 치환된다.
함수의 인수, 반환 값에 템플릿 인수를 사용한다.
호출하는 방법
int n1 = 100, n2 = 200, ret;
ret = GetMax(n1, n2);
...
템플릿 함수를 이용하면 int, double 형으로 된 2개의 함수를 하나로 만들 수 있게된다. (장점)
사용하는 형을 모호한 상태로 정의하는 클래스
복수의 형에 대응하는 클래스를 만들 수 있다.
template<class T>
class Rectangle {
public :
...
T GetRight() {
return left + width;
}
...
T left, top, width, height ;
} ;
Rectangle<int> rect ;
Rectangle<double> rect ;
템플릿 인수가 2개 이상일 경우 형을 복수로 지정할 수 있다.
template<class T1, class T2>
class Rectangle {
...
} ;
...
Rectangle<int, char> rect ;
(참고) 복수의 데이터를 저장하여 고나리하는 오브젝트를 "컨테이너 오브젝트" 라고한다.
메모리가 부족한 경우 자동적으로 메모리를 확보한다.
배열로 사용할 수 있다.
일반 배열과 달리 사이즈에 신경 쓰지 않아도 된다는 장점이 있다.
#include <vector>
#include <iostream>
using namespace std ;
int main()
{
vector<int> v1 ;
v1.push_back(10); // int 형을 저장하는 vector 오브젝트 생성
v1.push_back(11);
cout << "요소의 개수 : " << (int) v1.size() << endl ; // 요소 갯수 출력
cout << "v1[0] = " << v1[0] << endl ;
cout << "v1[1] = " << v1[1] << endl ;
return 0;
}
배열의 요소수를 정하지 않아도 되므로 편리하다 !
반복자
이 클래스의 오브젝트를 사용하면, 컨테이너 내부의 데이터에 동일한 방법으로 접근할 수 있다.
iterator 의 오브젝트는 컨테이너 오브젝트 내부의 한 요소를 가리킨다.
#include <vector>
#include <iostream>
using name space std ;
int main()
{
vector<int> v1 ;
v1.push_back(10);
v1.push_back(11);
v1.push_back(15);
vector<int>::iterator itr_first, itr_last, i;
itr_first = v1.begin() ;
itr_last = v1.end() ;
for (i = itr_first; i != itr_last ; i++) {
count << *i << endl ;
}
return 0;
}
vector 클래스 에서 이터레이터를 사용할 경우 위와 같이 사용한다.
iterator 에서 값에 접근할 경우 *를 붙인다.
모든 요소를 추출하려면 이터레이터의 카운터를 증가시킨다.