-
뇌를 자극하는 C++ STL 5장) STL 소개PROGRAMMING/STL 2024. 1. 27. 19:15
STL의 개관에 대해서 배워봅시당!
(혹시 저작권에 문제가 있다면 수정하겠습니다!! 개인적인 공부용으로 정리함을 알려드립니당)
https://m.hanbit.co.kr/store/books/book_view.html?p_code=B5912645820
STL(Standard Template Library)
프로그램에 필요한 자료구조와 알고리즘을 템플릿으로 제공하는 라이브러리
장점 1.효율성 2. 재사용성 3. 확장성
STL의 구성요소
1. 컨테이터(container)
2. 반복자(Iterator)
3. 알고리즘(algorithm)
4. 함수 객체(Function Object)
5. 어댑터(Adaptor)
6. 할당기(Allocator)
컨테이너
(같은 타입의) 객체를 저장하는 객체
1. 시퀀스 컨테이너 vs 연관 컨테이너로 분류
2. 배열 기반 컨테이너 vs 노드 기반 컨테이너로 분류
반복자
컨테이너의 원소를 가리키고, 가리키는 원소에 접근하여 다음 원소를 가리키게 하는 기능
⭐ 컨테이너와 알고리즘을 하나로 묶는 인터페이스의 역할 수행
특징
1. 컨테이너 내부 원소에 접근(* 연산자)
2. 다음 원소로 이동하고, 모든 컨테이너의 원소를 순회(++, !=, == 연산자)
sequence : 컨테이너 원소의 집합
STL의 모든 컨테이너는 멤버함수 begin()과 end()가 sequence의 시작과 끝을 가리키는 반복자를 반환하며 [begin, end)의 범위를 가진다.
// vector<int> v에 원소가 있다고 가정 vector<int>::iterator iter; for(iter = v.begin(); iter != v.end(); ++iter){ cout << *iter << endl; }
반복자의 범주
1. 입력 반복자(input iterator)
2. 출력 반복자(output iterator)
3. 순방향 반복자(forward iterator)
4. 양방향 반복자(bidirectional iterator) : list, set, multiset, map, multimap
5. 임의 접근 반복자(random access iterator) : vector, deque([], + 연산자 지원)
알고리즘
정렬, 삭제, 검색, 연산 등 일반적인 방법을 제공하는 함수 템플릿으로 한 쌍의 반복자([begin, end))이 필요하다.
ex) find, sort 등
알고리즘의 분류
1. 원소를 수정하지 않는 알고리즘
2. 원소를 수정하는 알고리즘
3. 제거 알고리즘
4. 변경 알고리즘
5. 정렬 알고리즘
6. 정렬된 범위 알고리즘
7. 수치 알고리즘
함수 객체
STL 알고리즘이 함수 객체, 함수, 함수 포인터 등의 함수류를 인자로 받아 알고리즘을 유연하게 동작시킨다.
어댑터
구성 요소의 인터페이스를 변경
1. 컨테이너 어댑터 : stack, queue, priority_queue
2. 반복자 어댑터 : reverse_iterator, back_insert_iterator, front_insert_iterator, insert_iterator
3. 함수 어댑터 : binder, negator, 함수 포인터 어댑터
✔️대표적인 컨테이너 어댑터 : stack(일반 컨테이너를 LIFO(Last-in-First-out) 방식으로 변환)
✔️ 대표적인 반복자 어댑터 : reverse_iterator
// 반복자 어댑터 reverse_iterator를 이용해 vector의 반복자를 역방향 반복자로 변형 reverse_iterator<vector<int>::iterator> riter(v.end()); reverse_iterator<vector<int>::iterator> end_riter(v.end()); for(; riter != end_riter; ++riter) //STL 모든 컨테이너는 반복자 어댑터 reverse_iterator를 typedef타입으로 정의 vector<int>::reverse_iterator riter(v.rbegin()); vector<int>::reverse_iterator end
✔️ 대표적인 함수 어댑터 : not2(조건자 함수 객체를 반대 의미의 조건자 함수 객체로 변경하는 어댑터)
* not1 : 단항조건자 / not2 : 이항조건자
할당기
컨테이너의 메모리 할당 정보와 정책을 캡슐화한 STL 구성 요소
(동적 메모리 할당 연산자 new와 delete를 사용자가 직접 오버로딩하는 것처럼 할당기도 직접 정의 가능)
'PROGRAMMING > STL' 카테고리의 다른 글
뇌를 자극하는 C++ STL 7장) 연관 컨테이너(set, multiset, map, multimap) (0) 2024.02.29 뇌를 자극하는 C++ STL 6장) 시퀀스 컨테이너(vector, deque, list) (2) 2024.02.28 뇌를 자극하는 C++ STL 4장) 템플릿(함수 템플릿, 클래스 템플릿) (0) 2024.01.19 뇌를 자극하는 C++ STL 2,3장) 함수 포인터와 함수 객체 (0) 2024.01.17 뇌를 자극하는 C++ STL 1장) 연산자 오버로딩 (0) 2024.01.17