C++ STL(표준 템플릿 라이브러리)에서 컨테이너(Container)는 여러 개의 요소를 저장하고 관리하는 객체입니다. 컨테이너는 데이터를 어떤 방식으로 구성하고 접근하느냐에 따라 크게 네 가지 유형으로 분류할 수 있습니다.
STL 컨테이너의 4가지 분류
1. 시퀀스 컨테이너 (Sequence Containers)
요소들이 삽입된 순서대로 선형적으로 저장되는 컨테이너입니다. 대표적인 예로 array, vector, list, deque가 있습니다.
- array: 고정 크기 배열로, 크기가 컴파일 타임에 결정됩니다.
- vector: 동적 배열로, 크기가 자동으로 확장되며 임의 접근이 빠릅니다.
- list: 이중 연결 리스트로, 삽입과 삭제가 빠르지만 임의 접근은 느립니다.
2. 연관 컨테이너 (Associative Containers)
키(Key)를 기반으로 요소를 정렬된 상태로 저장하는 컨테이너입니다. 내부적으로 균형 이진 트리(레드-블랙 트리)를 사용하므로 검색 속도가 O(log n)으로 빠릅니다. 대표적인 예로 set, map, multiset, multimap이 있습니다.
3. 비정렬 연관 컨테이너 (Unordered Associative Containers)
해시 테이블을 기반으로 요소를 저장하며, 정렬 순서를 보장하지 않습니다. 평균적으로 O(1)의 매우 빠른 검색 속도를 제공합니다. 대표적인 예로 unordered_set, unordered_map이 있습니다.
4. 컨테이너 어댑터 (Container Adapters)
기존 컨테이너를 감싸서 특정한 인터페이스만 제공하는 컨테이너입니다. 대표적인 예로 stack(LIFO 구조), queue(FIFO 구조), priority_queue가 있습니다.
예제 코드: 배열 컨테이너 사용하기
다음 예제는 크기가 10인 배열을 선언하고, 초기화되지 않은 나머지 요소는 자동으로 0으로 채워지는 것을 확인할 수 있습니다.
#include <iostream>
using namespace std;
int main() {
int array[10] = {1, 2, 3, 4};
for(int i = 0; i < 10; i++) {
cout << array[i] << " ";
}
return 0;
}실행 결과
1 2 3 4 0 0 0 0 0 0
위 출력에서 볼 수 있듯이, 배열을 일부만 초기화하면 나머지 요소들은 자동으로 0으로 초기화됩니다. 이처럼 STL 컨테이너를 상황에 맞게 선택하면 코드의 효율성과 가독성을 크게 향상시킬 수 있습니다.