반응형
C++ 템플릿과 STL: 핵심 개념 정리
📌 템플릿(Template)이란?
템플릿은 C++에서 일반화 프로그래밍을 구현하는 핵심 도구입니다.
함수나 클래스를 데이터 타입에 독립적으로 설계할 수 있게 해주며,
동일한 로직을 다양한 타입에 재사용할 수 있게 합니다.
🛠 템플릿의 핵심 특징
- 타입 추상화: typename T로 타입을 매개변수화하여 코드 재사용성 ↑
- 컴파일 시 인스턴스화: 실제 사용 시점에 구체적인 타입으로 생성됨
📝 템플릿 예시
1. 함수 템플릿
#include <iostream>
using namespace std;
template <typename T>
T myMax(T a, T b) {
return (a > b) ? a : b;
}
int main() {
cout << myMax(10, 20) << endl; // int 타입 사용
cout << myMax(3.14, 2.73) << endl; // double 타입 사용
cout << myMax('a', 'z') << endl; // char 타입 사용
return 0;
}
- 동작 원리: 호출 시 전달된 인자의 타입에 따라 T가 int, double, char로 대체됩니다.
2. 클래스 템플릿
#include <iostream>
using namespace std;
template <typename T>
class MyContainer {
private:
T value;
public:
MyContainer(T val) : value(val) {}
T getValue() const { return value; }
};
int main() {
MyContainer<int> intContainer(100); // int 타입 컨테이너
MyContainer<double> doubleContainer(3.14); // double 타입 컨테이너
cout << intContainer.getValue() << endl; // 100 출력
cout << doubleContainer.getValue() << endl; // 3.14 출력
return 0;
}
- 활용: 컨테이너 클래스를 타입에 관계없이 유연하게 생성 가능합니다.
🧩 STL에서의 템플릿 활용
**STL(Standard Template Library)**은 템플릿을 기반으로 한 범용 라이브러리입니다.
모든 구성 요소가 템플릿으로 구현되어 타입 독립적이며 재사용성이 극대화되었습니다.
STL의 주요 구성 요소
구성 요소설명예시
컨테이너 | 데이터 저장 구조 | vector<T>, map<Key, T> |
알고리즘 | 데이터 처리 함수 | sort(), find() |
이터레이터 | 컨테이너 요소 접근 도구 | vector<int>::iterator |
함수 객체 | 알고리즘 동작 커스터마이징 | 비교 함수, 람다 표현식 |
📚 STL의 분류
1. 컨테이너 (Container)
- 시퀀스 컨테이너: 순차적 데이터 저장
vector, list, deque - 연관 컨테이너: 정렬된 트리 구조 (탐색 O(log n))
set, map - 비정렬 컨테이너: 해시 테이블 기반 (탐색 평균 O(1))
unordered_set, unordered_map - 어댑터: 특정 인터페이스 제공
stack, queue
2. 알고리즘 (Algorithm)
- 정렬/검색: sort(), binary_search()
- 수정: transform(), reverse()
- 병렬 처리: C++17부터 std::execution::par 지원
3. 이터레이터 (Iterator)
- 종류: 입력, 출력, 순방향, 양방향, 랜덤 액세스
- 역할: 컨테이너와 알고리즘을 연결하는 추상화 계층
🔍 정리
- 템플릿: 타입에 독립적인 코드 작성 → 재사용성 ↑
- STL: 템플릿 기반 컨테이너/알고리즘 라이브러리
→ vector<int>, vector<string> 등 동일한 구조로 다양한 타입 처리 - 이터레이터: 알고리즘과 컨테이너를 유연하게 연결
반응형
'알고리즘 > Tip' 카테고리의 다른 글
C++에서 다항식 롤링 해시 구현 및 해시 테이블 활용하기 (0) | 2025.02.13 |
---|---|
동적프로그래밍(Dynamic Programming, DP) 의 두가지 주요 특성 (0) | 2024.11.06 |
동적계획법과 분할정복의 차이 ,그리고 동적계획법의 특징 (0) | 2024.09.08 |
C++ 문자열 자르기 총정리 (0) | 2024.06.19 |
백준 C++ eof 처리 방법 (0) | 2024.06.18 |