C++ STL(Standard Template Library, 표준 템플릿 라이브러리)은 벡터(vector), 리스트(list), 큐(queue), 스택(stack)처럼 널리 사용되는 알고리즘과 자료구조를 템플릿 기반으로 구현해 놓은 강력한 C++ 템플릿 클래스 집합입니다.
STL은 컨테이너 클래스, 알고리즘, 반복자로 이루어진 라이브러리입니다. 일반화(generalized) 라이브러리이기 때문에 모든 구성 요소가 매개변수화되어 있으며, STL을 제대로 활용하려면 템플릿 클래스에 대한 기본적인 이해가 필수적입니다.
템플릿(Template)은 C++ 프로그래밍 언어의 핵심 기능 중 하나로, 함수와 클래스가 다양한 자료형에 대해 동작할 수 있도록 해줍니다. 덕분에 자료형마다 코드를 새로 작성하지 않아도 하나의 함수나 클래스를 여러 타입에 그대로 재사용할 수 있습니다.
C++ 표준 템플릿 라이브러리는 다음과 같이 잘 구조화된 세 가지 핵심 구성 요소로 이루어져 있습니다.
1. 컨테이너(Container)
컨테이너는 특정 종류의 객체들을 모아 관리하는 데 사용됩니다. deque, list, vector, map 등 다양한 종류의 컨테이너가 제공되며, 크게 네 가지 유형으로 나눌 수 있습니다.
시퀀스 컨테이너(Sequence Containers) - 데이터를 순차적으로 접근할 수 있는 자료구조를 구현합니다.
- vector
- list
- deque
- array
- forward_list
컨테이너 어댑터(Container Adaptors) - 시퀀스 컨테이너에 대해 서로 다른 인터페이스를 제공합니다.
- queue
- priority_queue
- stack
연관 컨테이너(Associative Containers) - 정렬된 자료구조를 구현하여 빠른 검색(O(log n) 복잡도)이 가능합니다.
- set
- multiset
- map
- multimap
정렬되지 않은 연관 컨테이너(Unordered Associative Containers) - 정렬되지 않은 자료구조를 구현하며, 해시 기반으로 빠른 검색을 지원합니다.
- unordered_set
- unordered_multiset
- unordered_map
- unordered_multimap
2. 알고리즘(Algorithm)
알고리즘은 컨테이너 위에서 동작합니다. 컨테이너의 내용을 초기화하고, 정렬하고, 검색하고, 변환하는 등의 작업을 손쉽게 수행할 수 있는 수단을 제공합니다.
주요 알고리즘 분류
- 정렬(Sorting)
- 검색(Searching)
- 핵심 STL 알고리즘
- 유용한 배열(Array) 알고리즘
- 파티션(Partition) 연산
3. 반복자(Iterator)
반복자는 객체 컬렉션의 요소들을 한 단계씩 순회하며 접근하는 데 사용됩니다. 이때 컬렉션은 컨테이너 전체일 수도 있고, 컨테이너의 일부(부분집합)일 수도 있습니다.