C++/STL

STL이란 무엇인가?

Honey Badger 2022. 8. 4. 22:39

STL?

STL은  Standard Template Library의 약자로, C++에서 제공하는 '표준(Standard)' 라이브러리이다. STL은 다양한 자료구조를 클래스화시킨 컨테이너(Container) 와 이를 다루기 위한 알고리즘, 반복자, 조건자, 함수객체 등을 제공한다. 

Container 의 종류

1. 순차 컨테이너(시퀀스 컨테이너) : Vector, List, Deque...

2. 연관 컨테이너 : Set, Map, Multiset, Multimap...

3. 어댑터 컨테이너 : Stack, Queue...

Container 요약

1. Vector : 적은 양의 자료에 유리하고, 순차 접근, 랜덤 엑세스, 크기 변경이 가능하다. 하지만 Vector의 중간에 값을 삽입, 삭제, 검색하는 것이 느리고 자료 양이 많을수록 관리 효율이 떨어진다. 

2. Queue : 먼저 들어온것이 먼저 나가는 FIFO의 규칙을 가지는 자료구조이다.

3. Deque : 덱이라고 부르며 앞뒤로 넣고 뺄수있는 버전의 큐이다.

4. List : 양방향 연결리스트이다. List 중간에 값을 삽입, 삭제할 수 있고 크기도 변경 가능하다. Vector와 마찬가지로 적은 양의 자료에 유리하고, 순차접근이 가능하다. 하지만 랜덤 엑세스가 불가능하고, 검색이 느리다.

5. Forward_List : 단방향 연결리스트이다. 장단점은 List와 동일하지만 성능적으로는 더 가볍다. 

6. Stack : 먼저 들어온 값이 제일 나중에 나가는 LIFO의 규칙을 가지는 자료구조이다.

7. Map : 이진탐색트리를 기반으로 하고 있고, 값을 자동정렬해준다. key-value로 구성된 pair구조를 가지고 있다. 많은 양의 자료관리에 유리하고, 검색 속도가 비교적 빠르다. 하지만 적은 양의 자료엔 오버헤드(대포로 파리잡는 느낌) 로 인해 오히려 손해를 볼 수 있다.

8. Set : Map과 마찬가지로 이진탐색트리를 기반으로 하고 있고, 값을 자동정렬해준다. Map과 장단점이 거의 동일하고 Map과는 다르게 Key만 저장된다. (Key가 곧 Value).

9. Unordered_map, Unordered_set : 각각 정렬하지 않는 Map과 Set이다. 

장점

프로그래밍 시간이 대폭 단축되고, 템플릿이라는 강력한 기능을 사용하므로 유지보수와 확장이 쉬워진다. 또한 표준이므로 여러 전문가들에 의해 충분히 최적화되고 테스트되어 성능이 굉장히 뛰어나다. 

단점

다양한 구현을 하다보면 프로그램이 커질 가능성이 있다. ,