STL이 무엇인지, 어떤것들을 말하는지 알아보자
STL이란?
- C++의 표준 라이브러리의 일부분으로, Standard Template Library의 악자
- 자료구조와 알고리즘을 템플릿으로 제공하는 라이브러리
STL의 구성요소
- 컨테이너(container) - 객체를 저장하는 객체, 컬렉션 또는 자료구조라고 부름
- 반복자(iterator) - 컨테이너의 원소를 가르키며 해당 원소에 접근하여 다음 원소를 가리키는 기능
- 알고리즘(algorithm) - 정렬, 삭제, 연산 등 일반적인 함수 템플릿
- 함수 객체(function object) - 함수처럼 동작하는 객체로 오버로딩을 이용하여 컨테이너와 알고리즘에 클라이언트 정책을 반영
- 어댑터(adaptor) - 구성 요소의 인터페이스를 변경해 새로운 인터페이스를 갖는 구성요소로 변경하는 기능
- 할당기(allocator) - 컨테이너의 메모리 할당 정책을 캡슐화한 클래스 객체

컨테이너
- 같은 타입을 저장, 관리할 목적으로 만들어진 클래스
표준 시퀀스 컨테이너(standard sequence container)
- 컨테이너 원소가 자신만의 삽입 위치(순서)를 가지는 컨테이너(벡터, 덱, 리스트 / 선형적)
표준 연관 컨테이너(standard associative container)
- 저장 원소가 삽입 순서와 다르게 특정 정렬 기준에 의해 자동 정렬되는 컨테이너(set, map / 비선형적)
![업로드중..]()
배열 기반 컨테이너(array-based container)
- 데이터 여러 개가 하나의 메모리 단위에 저장(벡터, 덱)
노드 기반 컨테이너(node-based container)
- 데이터 하나를 하나의 메모리 단위에 저장(리스트, set, map)
![업로드중..]()
반복자
- 포인터와 비슷하게 동작
- 컨테이너와 알고리즘이 하나로 동작하게 묶어주는 인터페이스 역할
- 반복자로 인해 알고리즘이 특정 컨테이너에 종속적이지 않고 독립적, 컨테이너와 결합하여 동작
반복자의 특징
- 반복자는 컨테이너 내부의 원소(객체)를 가리키고 접근할 수 있어야 함('*' 연산자 제공)
- 다음 원소로 이동하고 컨테이너의 모든 원소를 순회할 수 있어야 함(증감, 비교 연산자 제공)
반복자의 범주
- 입력 반복자(input iterator) - 현 위치의 원소를 한 번만 읽을 수 있는 반복자 / istream
- 출력 반복자(output iterator) - 현 위치의 원소를 한 번만 쓸 수 있는 반복자 / ofstream
- 순방향 반복자(forward iterator) - 입력, 출력 반복자 기능에 순방향으로 이동(++)이 가능한 재할당될 수 있는 반복자
- 양방향 반복자(bidirectional iterator) - 순방향 반복자 기능에 역방향으로 이동(--)이 가능한 반복자 / list, set, multiset, map, multimap
- 임의 접근 반복자(random access iterator) - 양방향 반복자 기능에 +, -, +=, -=, [] 연산이 가능한 반복자 / vector, deque
알고리즘
< 7가지 범주로 분류 >
- 원소를 수정하지 않는 알고리즘
- 원소를 수정하는 알고리즘
- 제거 알고리즘
- 변경 알고리즘
- 정렬 알고리즘
- 정렬된 범위 알고리즘
- 수치 알고리즘
함수 객체
- 클라이언트가 정의한 동작을 다른 구성 요소에 반영하려 할 때 사용
어댑터
STL 어댑터
- 컨테이너 어댑터 : 스택, 큐, 우선순위 큐
- 반복자 어댑터 : 역방향 반복자, front or back insert반복자
- 함수 어댑터 : 바인더, 부정자, 함수 포인터 어댑터
할당기
- 컨테이너의 메모리 할당 정보와 정책을 캡슐화한 구성요소