컨테이너 개요 (vector, list, map 등)
STL 컨테이너의 개념
STL(Standard Template Library) 컨테이너는 C++에서 제공하는 재사용 가능한 데이터 구조입니다.
이들은 다양한 타입의 객체를 저장하고 관리하는 데 사용됩니다.
주요 특징
- 템플릿 기반 : 다양한 데이터 타입을 저장할 수 있습니다.
- 메모리 관리 자동화 : 동적 할당과 해제를 자동으로 처리합니다.
- 알고리즘과의 호환성 : STL 알고리즘과 함께 사용할 수 있습니다.
- 일관된 인터페이스 : 대부분의 컨테이너가 유사한 멤버 함수를 제공합니다.
컨테이너의 분류
STL 컨테이너는 크게 세 가지 범주로 나눌 수 있습니다.
1. 시퀀스 컨테이너 : 선형적으로 요소를 저장
2. 연관 컨테이너 : 키를 기반으로 요소를 저장
- set, multiset, map, multimap
3. 컨테이너 어댑터 : 다른 컨테이너를 기반으로 특정 인터페이스를 제공
- stack, queue, priority_queue
주요 컨테이너 소개
vector
vector
는 동적 배열을 구현한 컨테이너입니다.
특징
- 연속된 메모리 공간에 요소 저장
- 빠른 임의 접근 (O(1))
- 끝에서의 삽입/삭제 효율적 (O(1) 평균)
- 중간에서의 삽입/삭제는 비효율적 (O(n))
list
list
는 이중 연결 리스트를 구현한 컨테이너입니다.
특징
- 비연속적인 메모리 공간에 요소 저장
- 양방향 반복자 제공
- 어느 위치에서든 삽입/삭제 효율적 (O(1))
map
map
은 키-값 쌍을 저장하는 연관 컨테이너입니다.
특징
- 키를 기준으로 정렬된 상태 유지
- 빠른 검색 (O(log n))
- 유일한 키 보장
컨테이너 선택 기준
적절한 컨테이너 선택은 다음 요소들을 고려해야 합니다.
- 데이터 접근 패턴 (순차적 vs 임의)
- 삽입/삭제 빈도 및 위치
- 메모리 사용량
- 성능 요구사항
예를 들어,
- 빈번한 임의 접근이 필요하다면
vector
- 빈번한 중간 삽입/삭제가 필요하다면
list
- 키-값 쌍으로 데이터를 관리해야 한다면
map
실습 : 다양한 컨테이너 활용
다음 요구사항을 만족하는 프로그램을 작성해보세요.
vector
를 사용하여 학생들의 점수를 저장하고 평균을 계산
list
를 사용하여 할 일 목록을 관리 (추가, 완료 표시, 삭제)
map
을 사용하여 학생 이름과 성적을 연결하여 저장
연습 문제
vector
를 사용하여 정수 배열을 저장하고, 짝수만 필터링하여 새로운 vector
를 만드는 함수를 작성하세요.
list
를 사용하여 문자열을 저장하고, 사용자로부터 입력받은 문자열을 알파벳 순서에 맞게 삽입하는 프로그램을 작성하세요.
map
을 사용하여 단어와 그 빈도수를 저장하는 간단한 단어 카운터 프로그램을 작성하세요.
참고자료
- "The C++ Standard Library" by Nicolai M. Josuttis
- C++ Reference : Containers library
- "Effective STL" by Scott Meyers