프로그래밍 언어/C & C++ 정리

STL 컨테이너

게임 개발 2024. 3. 27. 11:49
STL 컴포넌트의 개요

 STL에는 여섯 가지의 주요 컴포넌트 즉,

컨테이너(container), 제너릭 알고리즘(generic algorithm),
반복자(iterator), 함수 객체(function object), 어댑터(adaptor), 할당기(allocator)가 포함되어 있다.

 

 

컨테이너

 

 객채들의 컬렉션을 저장하고 있는 객체를 SLT에서는 컨테이너라고한다.

STL에는 두 가지 종류의 컨테이너가 있는데, 하나는 시퀀스 컨테이너이고,

다른 하나는 정렬 연관 컨테이너이다.

 

시퀀스 컨테이너

 

 시퀀스 컨테이너는 타입이 동일한 객체들을 선형으로 구성한 컬렉션이다.

STL의 시퀀스 컨테이너에는 다음 세 가지 종류가 있다.

 

vector<T> : 가변 길이 시퀀스를 임의 접근(random access)할 수 있으며,

시퀀스 맨 끝에서 수행되는 삽입과 삭제는

아모타이즈드 상수 시간(amortized constant time)에 수행이 가능하다.

(여기서 임의 접근(random access)이 가능하다는 것은,

시퀀스 i번째 원소를 접근하는데 걸리는 시간이 상수 시간이라는 것을 의미한다.

이는 다시 말해, i 값에 상관없이 소요 시간은 항상 일정하다는 뜻이다.)

 

deque<T> : 이것 또한 가변 길이 시퀀스를 임의 접근할 수있으며,

시퀀스 맨 앞과 맨 끝에서 수행되는 삽입과 삭제는 모두 아모타이즈드 상수 시간에 수행이 가능하다.

 

list<T> : 가변 길이 시퀀스에 대해서 선형 시간 접근만이 가능하며

(즉, 소요 시간은 O(n), 여기서 N은 시퀀스의 현재 길이),

삽입과 삭제는 시퀀스 내에서라면 어디서든지 상수 시간 내에 수행이 가능하다.

 

각각의 시퀀스 컨테이너 타입에 관해 상세히 설명하기에 앞서,

우선 한 가지 명심해야 할 것이 있다.

그것은 우리가 일반적으로 사용하는 C++ 배열 타입에 해당하는 Ta[N]

시퀀스 컨테이너와 동일하게 취급할 수 있다는 점이다.

이는 STL 제네릭 알고리즘이 배열에 대해서도

여타 다른 시퀀스 타입의 경우와 동일하게 동작할 수 있도록 설계되었기 때문이다.

 

또한 라이브러리에서 제공되는 타입 중에 문자들의 시퀀스를 표현하는

string타입( <string> 해더에 속해 있는 것들 )도 STL 알고리즘과 함께 사용이 가능하다.

 

reverse 제네릭 알고리즘은 시퀀스의 순서를 거꾸로 뒤집을 때 사용하는데,

string 객체와 배열에서도 잘 동작한다.