※ LIG Nex1 The SSEN Embedded SW School에서 진행된 내용을 정리한 포스팅입니다.
STL
- 템플릿 기반의 강력한 라이브러리
- 3가지 부분으로 나뉜다.
- container: 어떤 타입의 객체를 저장하기 위한 자료구조
- iterator: 데이터를 순회하기 위한 반복자
- algorithm: 컨테이너에서 사용할 수 있는 기능
Container
- sequence container
- 선형적으로 데이터만 저장하는 형태
- ex) vector, deque, list
- Associatibe container
- 비선형적 자료구조
- key-value, hash table
- Container adapters
- sequence 컨테이너에서 제약조건을 주어 특정 자료구조를 구현한다.
- ex) stack, queue
iterator
- const iterator
- 읽기만 가능한 iterator
- iterator
- 읽기/쓰기가 가능한 iterator
- container는 반복의 시작과 끝 지점을 알려주기 위해 begin()과 end() 메서드를 제공한다.
sequence container
vector
- 배열 기반
- index 접근 가능
- []연산자를 통해 접근한다.
- 중간에 삽입/삽제 시 비용이 많이 든다.
- 메모리가 부족할 경우 확장이 자동으로 일어난다.
- capacity와 size를 잘 구분하자.
- 용량과 실제 데이터의 개수
- 기존의 배열이 다 찼을 때, 더 큰 배열을 잡고 기존 배열을 복사해 넣은 뒤 기존 배열을 할당 해제한다.
list
- double linked list 기반
- 순방향, 역방향 모두 탐색이 가능하다.
- 중간에서 일어나는 삽입 연산이 빠르다.
deque
- list와 array의 장점을 모두 갖춘 컨테이너
- 기존의 배열이 다 찼을 때 더 큰 배열을 잡고 기존 배열을 할당 해제하지 않고 다음 원소로 새로 할당 받은 배열의 첫 번째 원소를 가리키도록 한다.
Associatibe container
- set, multiset, map, multimap
- rb 트리로 구현되어 있다.
- set, map은 값의 중복, 키의 중복을 허용하지 않는다.
- multiset, multimap은 값의 중복, 키의 중복을 허용한다.
- 사용자 정의 타입을 지정하려면 less, greater 연산자를 오버라이딩해야 한다.
Container Adapters
- stack, queue, prioriti_queue
- 선형 컨테이너를 지정하여 생성할 수 있다.
Algorithms
- 사용자 정의 타입을 사용하려는 경우 적절한 연산자를 오버라이딩 해야 한다.
- friend를 사용하여 전역으로 오버라이딩 해주어야 한다.
- find()
- 해당 값과 일치하는 항목을 검색하는 메서드 operator== 를 오버라이딩 해야 한다.
- sort()
- operator< 를 오버라이딩 해야 한다.
기타 자세한 설명은 레퍼런스 홈페이지에서 찾아보는 것이 좋습니다 :)
https://cplusplus.com/reference/stl/
cplusplus.com
※ 질문, 개선점, 오류가 있다면 댓글로 남겨주세요 :)
'Language > C++' 카테고리의 다른 글
[TheSSEN/C++] 12. 파일 입출력 (0) | 2025.01.31 |
---|---|
[TheSSEN/C++] 11. 예외 처리 (0) | 2025.01.31 |
[TheSSEN/C++] 10. 템플릿 (0) | 2025.01.29 |
[TheSSEN/C++] 9. 연산자 오버로딩 (0) | 2025.01.27 |
[TheSSEN/C++] 8. 다형성 (0) | 2025.01.27 |