KH_C++
STL 구성요성 본문
STL - STL은 표준 C++ 라이브러리의 일부분으로 (Standard Template Library)의 약자이다.
STL의 정의는 "반복자를 가지고 동작하는 C++ 표준 라이브러리의 일부분"이라고 정의한다.
STL은 우리가 C++ 프로그래밍에서 만들어야 하는 여러 가지 자료구조 클래스와 알고리즘 등을 미리 만들어 놓은 라이브러리로 반복자를 통해서 동작하는 라이브러리이다.
STL의 주요 구성요소
- 컨테이너(Container) : 개체를 저장하는 개체. Collection 혹은 자료구조라고도 함.(vector, list, string, map)
- 반복자(iterator) : 포인터와 비슷한 개념으로 컨테이너의 원소를 가리키고,
가리키는 원소에 접근하여 다음 원소를 가리키게 하는 기능. - 알고리즘(Algorithm) : 정렬, 삭제, 검색, 연산 등을 해결하는 일반화된
방법을 제공하는 함수 템플릿.(find, short, search) - 함수자(Function Object, Functor) : 함수처럼 동작하는 개체. operator() 연산자로 오버 로딩.
컨테이너와 알고리듬 등에 클라이언트 정책을 반영하게 함.
컨테이너
컨테이너는 두 가지 종류로 나뉜다.
- 표준 시퀀스 컨테이너(standard sequence container): 컨테이너 원소가 자신만의 삽입 위치를 가지는 컨테이너(ex. vector, deque, list : 선형적)
- 표준 연관 컨테이너(standard associative container): 저장 원소가 삽입 순서와 다르게 특정 기준에 의해 자동 정렬되는 컨테이너(set, multiset, map, multimap : 비선형적)
또한 컨테이너는 데이터를 하나의 연속한 메모리 단위로 저장하느냐에 따라 두 가지로 나눌 수 있다.
- 배열 기반 컨테이너(array-based container): 데이터 여러 개가 하나의 메모리 단위에 저장(vector, deque)
- 노드 기반 컨테이너(node-based container): 데이터 하나를 하나의 메모리 단위에 저장(list, set, multiset, map, multimap)
반복자
반복자는 포인터와 비슷합니다. 컨테이너에 저장된 원소를 순회하고 접근하는 방법을 제공합니다. 또한 컨테이너와 알고리즘이 하나로 동작하게 묶어주는 인터페이스 역할을 합니다.
STL에서는 컨테이너 원소(객체)의 집합을 순차열(sequence)라고 합니다. 순차 열은 순서가 존재합니다. 멤버 함수 begin()과 end()는 순차 열의 시작과 끝을 가리키는 반복자를 반환합니다.
반복자는 다음과 같이 다섯 범주로 나뉩니다.
- 입력 반복자(input iterator): 현 위치의 원소를 한 번만 읽을 수 있는 반복자
- 출력 반복자(output iterator): 현 위치의 원소를 한 번만 쓸 수 있는 반복자
- 순방향 반복자(forward iterator): 입력, 출력 반복자 기능에 순방향으로 이동(++)이 가능한 재 할당될 수 있는 반복자
- 양방향 반복자(bidrectional iterator): 순방향 반복자 기능에 역방향으로 이동(--)이 가능한 반복자
- 임의 접근 반복자(random access iterator): 양방향 반복자 기능에 +, -, +=, -=, [] 연산이 가능한 반복자
모든 컨테이너는 양방향 반복자 이상을 제공합니다
알고리즘
STL은 순차 열의 원소를 조사, 변경, 관리, 처리할 목적으로 알고리즘을 제공합니다. 알고리즘 대부분은 순방향 반복자를 요구하지만, 몇몇 알고리즘은 임의 접근 반복자를 요구합니다. STL 알고리즘은 다음과 같이 일곱 가지로 구분할 수 있다.
- 원소를 수정하지 않는 알고리즘(nonmodifying algorithms)
- 원소를 수정하는 알고리즘(modifying algorithms)
- 제거 알고리즘(removing algorithms)
- 변경 알고리즘(mutating algorithms)
- 정렬 알고리즘(sorting algorithms)
- 정렬된 범위 알고리즘(sorted range algorithms)
- 수치 알고리즘(numeric algorithms)
함수 객체
STL에서 함수 객체는 클라이언트가 정의한 동작을 다른 구성 요소에 반영하려 할 때 사용된다.
STL 알고리즘이 함수 객체, 함수, 함수 포인터 등의 함수류를 인자로 받아 알고리즘을 유연하게 동작시킨니다.
대표적인 함수자 클래스가 less <>와 greater <>이다.
ex)
'C++' 카테고리의 다른 글
오답노트 (0) | 2022.11.11 |
---|---|
벡터(Vector)의 멤버함수 (0) | 2022.11.09 |
메모리 구조 이해 (0) | 2022.10.26 |
자료형, 연산자 우선순위 (0) | 2022.10.11 |
Compile 과정 조사 및 정리 (0) | 2022.10.09 |