표준 템플릿 라이브러리(STL, Standard Template Library)
by St1tch표준 템플릿 라이브러리(STL, Standard Template Library)
l 컨테이너(contatiner) : 객체들을 담아둘 수 있는 객체를 말한다. 예를들면 배열과 유사한 vector이 있다.
l 반복자(iterator) : 컨테이너와 알고리즘 사이에서 이를 연결해 주는 역할을 한다. 반복자는 컨테이너가 관리하는 요소에 접근할 수 있게 해 주는 추상화된 개념으로서, 프로그램을 하는 데 있어 반복적인 작업에 이름을 붙여서 프로그래머가 반복적인 작업을 할 때 사용하는 패턴 중 하나다. 반복자를 통해 컨테이너 내의 요소들을 다양한 방법으로 다룰 수 있기 때문에 알고리즘과 컨테이너를 연결하는 매체가 된다. 컨테이너에 알고리즘을 적용하려면 반복자가 꼭 필요하다.
l 알고리즘(algorithm) : 자료들을 가공하고 적절히 사용할 수 있는 방법을 말한다. 예를 들면 컨테이너를 정렬하기 위한 sort를 들 수 있다. STL에서는 알고리즘을 컨테이너에서 완전히 분리시켜 컨테이너 종류와는 무관하게 어떤 컨테이너에서도 적용할 수 있도록 이식성을 높였다.
컨테이너
-배열과 같은 자료형을 의미하며 deque, list, queue, priority_queue, stack, vector 6가지가 제공됨.
자료를 저장하는 방식과 삽입, 정렬, 삭제하는 관리 방식에 따라 크게 3가지로 분류할 수 있다.
① 시퀀스 컨테이너
자료의 선형적인 집합이며 자료를 저장하는 기본 임무에 충실한 가장 일반적인 컨테이너
삽입된 자료를 무조건 저장하며, 시퀀스의 임의 위치에 원하는 요소를 삽입 ,삭제 가능
벡터, 리스트 ,데크 3가지의 컨테이너 제공
② 연관 컨테이너
자료를 무조건 저장하는 것이 아니라 일정한 규칙에 따라 자료를 조직화해서 관리하는 컨테이너
정렬이나 해시 등의 방법을 통해 삽입되는 자료를 항상 일정한 기준에 맞는 위치에 저장, 검색속도 빠름
셋, 맵 등의 컨테이너 제공
③ 어댑터 컨테이너
시퀀스 컨테이너를 변형해서 자료를 미리 정해진 일정한 방식에 따라 관리하는 컨테이너
스택, 큐, 우선순위 큐 등 3가지의 컨테이너 제공되며 규칙대로 조작해야한다.
Vector, map, set이 STL 컨테이너 중 가장 많이 쓰인다.
Vector – 배열과 유사하다.
Map – 키(key), 값(value)의 쌍으로 데이터를 저장하므로 키를 이용해서 값을 찾을 때 유용
Set – 데이터의 중복을 허용하지않고 저장해야 할 경우 사용
반복자
-컨테이너 종류에 따라서 접근방식이 다른데, 이를 모두 익혀서 사용하는 불편함을 해소하고자 나온 개념
Iterator 클래스로 객체 선언을 해야 한다.
vector <int>::iterator iter ;
vector <int> v;
iter = v.begin() ;
iter = v.end() ;
-상수반복자와 비상수반복자
상수 반복자(const iterator)는 읽기만 가능하고 쓰기가 불가능하며 상수 객체의 요소에 접근할 수 있으며(const),
비상수 반복자(iterator)는 읽기, 쓰기 모두 가능하다.
-역방향 반복자와 상수 역방향 반복자
역방향 반복자(reverse_iterator)는 뒤에서부터 시작하며 rbegin(), rend()가 시작,끝이며 ++,--가 반대이다.
상수 역방향 반복자(const_reverse_iterator)는 읽기만 가능하다.
알고리즘
변경 불가 시퀀스 알고리즘(for_each, find, adjacent_find, count, mismatch, equal, search 등)
변경 가능 시퀀스 알고리즘(copy, swap, transform, replace, fill, generate, remove, unique, reverse 등)
정렬 관련 알고리즘(sort, merge, min, max, binary_search 등)
범용 수치 알고리즘(accumulate, inner_product, partial_sum, adjacent_difference)
블로그의 정보
튜기's blogg(st1tch)
St1tch