수업기록 #STL STL (Standard Template Library) Generic Programming 의 대표 문법.
STL의 구성 요소로 표현되어지는 4가지 용어
1. 컨테이너 : 데이터를 저장하는 객체, 즉 자료 구조를 구현한 객체 (클래스 템플릿 집단)
-
[*] 컨테이너의 분류 기준
-
표준 시퀀스 컨테이너 : vector, deque1, list, array, forward_list2,
연달아 정렬한 형태로 정리한 컨테이너 -
표준 연관 컨테이너(정렬) : set, multi-set, map, multi-map 비선형적 구조의 특징을 가진 컨테이너
-
표준 연관 컨테이너(비정렬) : unordered_set, unordered_map
-
[>] 메모리 저장 방식에 따른 분류법
- 배열 기반 컨테이너 : vector, deque
- 노드 기반 컨테이너 : set, multi-set, map, multi-map, list
-
[>] 컨테이너 어댑터(연결 장치)
- Stack , queue, priority_queue
- 컨테이너의 기능 중 일부의 기능만 사용 가능, 기능 제한이나 변형되어 있는 형태로 사용함.
- 컨테이너의 기능을 보완하거나, 추가적인 사용성을 지원하는 용도로 사용함
-
[>] 근사 컨테이너(almost)
- 템플릿으로서의 속성을 모두 갖추지 못한 상황의 컨테이너
- string / wstring
2. 알고리즘 (STL 알고리즘)
#include <algorithm> 파일을 포함해야 제공하는 STL 함수들을 사용할 수 있음
- [*] 대량의 데이터를 관리할 떄 무엇이 더 효울적인지에 대한 것을 다루는 학문
- [?] 알고리즘의 사용처 탐색 / 정렬 / 삭제와 같은 방법 일반화된 방법으로 제공, 함수 템플릿 집단 특정 컨테이너 멤버가 아닌 전역 함수의 형태로 제공 다수 컨테이너에 대해 동일하게 적용 가능하도록 캡슐화를 진행하지 않음.
보통 알고리즘을 사용하는 형태 = 알고리즘 (begin, end, 조건자)
범위를 지정해주어, 순회를 하며 조건에 맞는 것을 찾아주는 형태
3. 함수 객체
- [*] 객체를 함수처럼 사용하는 문법. 함수 포인터보다는 함수 객체를 이용해서 만드는 것이 권장됨. 보편적으로는 bool 타입을 반환하는 형태로 제작하며, STL 알고리즘 동작의 조건을 제공하기 위해 제작됨.
- [!] 그러나 람다식의 등장으로 사용 입지가 줄어들게 되었음.
4. 반복자 ⭐⭐⭐
- [*] 컨테이너 안의 원소를 접근하기 위한 용도의 객체(절대 포인터 아님3) 컨테이너 마다 개별적인 반복자를 소유하고 있으나, 멤버 변수or 함수는 아님4
- 관리하는 방식이 컨테이너 마다 다르기 때문에 컨테이너를 순회하는 방법과 원소를 참조하는 방법을 획일화하여 사용할 수 있도록 제공
STL 컨테이너의 특성
-
[I] 벡터의 특성 vector
- 반개 구간 (반만 열렸다)
[ begin, end )- 시작은 언제나 같지만, 끝은 정해지지 않았다. - 동적 배열을 기반으로 하는 컨테이너.
- 인덱스 접근이 가능하다 = 탐색이 빠르다.⭐
- 삽입 시에 앞에서부터 삽입할 수 없다. (맨 끝부터 추가)
- 중간 삽입 및 삭제 시, 원소 개수 만큼의 선형적 시간 복잡도가 발생함.(꺼내서 지우고 다른 곳에 재할당)❗
- 벡터의 원소를 삭제해도 존재했던 공간(메모리)은 남아있다.
- 맨 끝에 삽입 삭제 시에는 상수 시간 복잡도가 발생한다. (빠르다)
- 배열의 크기를 넘어갓을 때, 동적 배열의 재할당과 원소 복사가 있기에 느리다.
- 반개 구간 (반만 열렸다)
-
[I] 리스트의 특성 List
- 노드를 기반으로 하는 컨테이너
- 앞/뒤 노드의 삽입 삭제가 가능하다.(상수 시간 복잡도)⭐
- 비연속적인 공간에 나열된 노드들을 연속된 것처럼 나열. 그래서 인덱스 접근이 불가함. ❗
- 탐색과 순회가 반드시 순서대로 진행되기 때문에 선형 시간 복잡도가 걸린다.
++/--연산자만 오버로딩 되어 있음.- 한정된 메모리 공간을 사용하는 것이 아니기 때문에 데이터 저장이 유연하다.⭐
-
[I] 덱(deque)의 특성 deque
- vector의 한 종류의 컨테이너이며 동적 배열 기반이다.
- 인덱스 접근이 가능하다.
- chunck5 형태의 데이터 저장이 진행됨.
- 벡터와 리스트가 혼합된 형태.
- 벡터랑 비교했을 때 8배 가까이 되는 메모리 용량을 요구함.
-
[I] 표준 연관 컨테이너의 특성(정렬)
- 기본적으로 트리 기반으로 구성된 컨테이너.
[#추천도서] 제프리 리처의 WINDOWS VIA C/C++(복간판) - 국내도서 (준형이형 추천)