template
키워드로 함수나 클래스 선언template <class T>
또는 template <typename T>
template <class T1, class T2, class T3>
템플릿의 제네릭 타입에 구체적인 타입 지정
template <class T>
class MyStack {
int tos;
T data [100]; // T 타입의 배열
public:
MyStack();
void push(T element);
T pop();
};
template <class T>
void MyStack<T>::push(T element) {
...
}
template <class T> T MyStack<T>::pop() {
...
}
MyStack<int> iStack; // int 타입을 다루는 스택 객체 생성
MyStack<double> dStack; // double 타입을 다루는 스택 객체 생성
iStack.push(3);
int n = iStack.pop();
dStack.push(3.5);
double d = dStack.pop();
제네릭 클래스와 제네릭 함수 포함
구성
- 컨테이너 – 템플릿 클래스
- iterator – 컨테이너 원소에 대한 포인터
- 알고리즘 – 템플릿 함수
반복자
iterator 변수 선언
vector<int>::iterator it;
it = v.begin();
#include <map>
필요iterator와 함께 작동
sort() 함수
vector<int> v;
...
sort(v.begin(), v.begin()+3); // v.begin()에서 v.begin()+2까지, 처음 3개 원소 정렬
sort(v.begin()+2, v.begin()+5); // 벡터의 3번째 원소에서 v.begin()+4까지, 3개 원소 정렬
sort(v.begin(), v.end()); // 벡터 전체 정렬
쉬운 변수 선언 가능
함수의 리턴 타입으로부터 추론하여 변수 타입 선언
vector<int>iterator
타입의 변수 it를 auto를 이용하여 간단히 선언
수학 함수를 단순하게 표현하는 기법
[](int x, int y) { cout << x + y; }; // x, y의 합을 출력하는 람다식