STL이란 Standard Template Library의 약자로,
자료구조를 따로 구현하지 않아도 사용할 수 있도록 만든 편의용 라이브러리다.
매우 편하고 방대하기 때문에 없어서는 안 될 귀중한 존재이다. 양이 매우 많아 모두 다룰 수 없으므로 자주 사용하는 몇 가지만 정리한다.
표준 STL은 std
namespace 내에 존재하므로 사용 시 명시해주어야 한다.
STL이 제공해주는 기능은 대략적으로 다음과 같다.
- 자료구조 : List, Stack, Queue, Tree, Hash 등
- 알고리즘 : Sort, Binary tree, Heap opration 등
- 기타 유틸리티(날짜, 시간), Thread, Concurrency 등
STL의 중요 요소 중 컨테이너 / 반복자 / 알고리즘에 대해 간단히 정리한다.
컨테이너(Container)
- 컨테이너란, 자료구조(Linked List, Stack, Queue, Tree, Hash 등)를 지칭하는 단어이다.
- 정확한 종류는 link
- STL의 컨테이너가 지니는 공통적인 특징은 다음과 같다.
- 대부분 멤버 함수의 이름이 동일하다.
push_front()
,push_back()
,pop_front()
,insert()
등- 위와 같은 함수를 공유하기 때문에, 함수명을 수정하지 않고 컨테이너를 통째로 바꿀 수 있다.
- 제거와 반환을 동시에 하지 않는다.
pop_front()
와pop_back()
함수는 제거만 하고front()
와back()
은 반환만 한다.- 그런 이유로
int n1 = v.pop_back()
과 같은 코드가 있을 때,pop_back()
의 리턴값은 void이기 때문에(제거만 하므로) 에러가 나게 된다.
- 대부분 멤버 함수의 이름이 동일하다.
Containers library - cppreference.com
Thread safety All container functions can be called concurrently by different threads on different containers. More generally, the C++ standard library functions do not read objects accessible by other threads unless those objects are directly or indirectl
en.cppreference.com
반복자 (Iterator)
- 배열의 요소에 접근하는 방법은 크게 두 가지가 있다. (1) 배열의 연산자를 사용하거나 (2) 포인터를 사용하는 것이다.
- 반복자는 (2)번의 포인터 접근 방법과 유사하게 동작하는 객체로, 컨테이너의 모슨 요소를 순차적으로 접근한다.
- 대표적으로
begin()
과end()
함수가 있는데, 컨테이너의 시작과 끝 다음의 요소를 가리킨다.end()
가 끝 요소가 아니라 끝 다음의 요소를 가리키는데 주의해야 한다. 보통 컨테이너의 끝에 도달했는지 확인하는 용도로 사용한다.- Array나 Vector같이 연속된 메모리에 저장되는 컨테이너가 아니어도 작동하기 때문에 편리하다.
알고리즘 (Algorithm)
- STL의 알고리즘을 다룰 때 의외인 점은 멤버 함수가 아닌 일반 함수로 제공된다는 점이다. 어차피 같은 기능인데, 멤버 함수로 만들면 일일이 다 만들어야 하기 때문이다.
- 이런 이유로 자료구조의 종류와 상관없이 사용할 수 있다. 자세한 종류는 link
- 항상 코드를 작성하기 전, 내가 하고 싶은 일을 미리 구현해 둔 알고리즘이 없는지 검색하는 습관이 들어야 한다.
Algorithms library - cppreference.com
The algorithms library defines functions for a variety of purposes (e.g. searching, sorting, counting, manipulating) that operate on ranges of elements. Note that a range is defined as [first, last) where last refers to the element past the last element to
en.cppreference.com
'C++' 카테고리의 다른 글
[C++] Global, Static 키워드 이해 (0) | 2022.12.30 |
---|---|
[C++] 람다식 (Lambda Expression) 만드는 순서 암기용 (0) | 2022.12.25 |