C++ 이 갖는 프로그래밍 언어로의 특징 중 하나로 일반화 프로그래밍(Generic Programming) 을 들 수 있다. 일반화 프로그래밍은 데이터를 중시하는 객체 지향 프로그래밍과는 달리 프로그램의 알고리즘에 그 중점을 둔다.
C++ 표준 템플릿 라이브러리인 STL(Standard Template Library) 도 이러한 일반화 프로그래밍 패러다임의 한 축을 담당하고 있다. STL 은 알고리즘을 일반화한 표현을 제공하여 데이터의 추상화와 코드를 재활용할 수 있게 한다.
STL 에서 컨테이너(Container) 는 객체를 저장하는 일종의 집합이라 할 수 있다. 컨테이너는 클래스 템플릿의 형태로 구현되어 있기 때문에 임의의 타입의 원소들을 위한 컨테이너를 만들 수 있다. 한 컨테이너에는 같은 타입의 객체들만 보관할 수 있다.
컨테이너는 자신이 보관하는 원소들의 메모리를 관리하며, 각각의 원소에 접근할 수 있도록 멤버 함수도
제공해준다. 또한 반복자 iterator 를 통해 컨테이너의 원소에 접근할 수 있다.
STL 에서 컨테이너는 자료를 저장하는 방식과 관리하는 방식에 따라 여러 가지 형태로 나뉠 수 있다. 컨테이너는 크게 다음과 같이 세 가지 유형으로 구분된다.
데이터를 선형으로 저장하며, 특별한 제약이나 규칙이 없는 가장 일반적인 컨테이너이다.
std::vector, std::deque, std::list 등이 있다.
데이터를 일정한 규칙에 따라 조직화하여 저장하고 관리하는 컨테이너이다.
std::set, std::multiset, std::map, std::multimap 등이 있다.
간결함과 명료성을 위해 인터페이스를 제한한 시퀀스나 연관 컨테이너의 변형이다.
반복자를 지원하지 않아 STL 알고리즘에서는 사용할 수 없다.
std::stack, std::queue, std::priority_queue 등이 있다.