표준 템플릿 라이브러리(Standard Template Library)
기능을 제공하고 손쉽게 구현하며, 재사용을 하기 위한 목적의 언어들은 누구나 공통적으로 사용하기 위한 일반화 프로그래밍이 기반의 템플릿을 사용하는데, 그 안에서 무분별한 여러 형태의 코드를 지양하고 표준화된 코드를 지향하는 것이 STL(표준 템플릿 라이브러리)이다.
사전적으로 무언가를 담는 '용기'를 의미하는데, 즉, 배열처럼 동일한 내용들로 구성된 요소를 담는 공간을 의미하는 템플릿 기반의 라이브러리
컨테이너는 크게 순차 컨테이너(Sequence Container)와 정렬 연관 컨테이너(Sorted Associactive Container)로 나눌 수 있고 세부적으로는 순차 컨테이너, 컨테이너 어댑터, 정렬 연관 컨테이너, 정렬되지 않은 연관 컨테이너로 총 4가지 유형이 있다.
순차 컨테이너(Sequence Container)
: 동일한 객체가 선형으로 구성된 집합으로 백터, 데크, 리스트 이렇게 총 3가지가 있다.
정렬 연관 컨테이너(Sorted Associactive Container)
: 키(key)와 값(value)형태로 짝을 이룬 데이터(예: JSON 파일 등)를 삽입된 순서가 아닌 키 값을 기준으로 정렬해서 자료를 보관하는 컨테이너로 순차 컨테이너와 마찬가지로 실행 시 크기를 동적으로 변경할 수 있다.
편의점으로 예를 들어보면, 키는 편의점의 바코드이고, 값은 그 바코드에 들어있는 가격이라고 할 수 있다.
따라서, (진열이 되어 있지 않다는 전제하에) 바코드를 찍기 전까지는 상품의 가격을 확인할 수 없고 가격이라고 하는 value에 접근 하기 위해서는 바코드라고 하는 key가 필요한 것이다.
컨테이너의 "요소를 가리키는 객체(=iterator)"로 컨테이너의 시작부터 끝까지 이동하면서 요소를 읽거나 쓰기 위해 사용
컴파일러의 내부 알고리즘은 컴파일러 제작 회사마다 조금씩 다르며, 반복자의 제한적 규정을 통해 각기 다른 컨테이너의 성능을 보장하도록 했다.
정렬, 검색하는 방법같은 유용한 생각들을 정리해놓은 함수들로, 알로기즘은 모두 일반적이기 때문에 하나의 컨테이너에 종속되지 않고 여러 컨테이너에서 사용이 가능하다.
장점
1. 범용적, 공통적으로 사용할 수 있도록 일반화를 지원한다. 즉, 누구나 다 사용할 수 있도록 제공한다.
2. 컴파일 타입의 매커니즘을 사용하므로 실행 시 효율의 저하가 거의 없다.
3. 표준이므로 이식성이 좋다.
4. 소스 공개로 확장성이 좋다.
단점
1. 템플릿기반이므로 함수와 클래스가 매번 구체화되어 소스가 비대해진다.
2. 가독성이 떨어진다. 템플릿 기반 코드이므로 입문하기가 쉽지 않다.
3. 예외 처리 적용이 쉽지 않다.