[C/C++] STL Container

원준·2023년 12월 13일

C/C++

목록 보기
1/2
post-thumbnail

알고리즘 문제를 풀다가 사용 언어를 C에서 C++로 넘어갔을 때의 기억이 떠올랐다.

C에서는 stack이니 queue니 하나씩 구현하느라 시간이 엄청 오래걸려 불편했었는데
C++에서는 그냥 생성자를 사용하면 생성되는 걸 보고 크게 놀랐었다.

그래서 생각난 김에 나에게 신세계를 보여줬던 C++의 STL 컨테이너에 대해 알아보기로 했다.


1. STL 컨테이너

STL이란 표준 템플릿 라이브러리의 줄임말로 C++을 위한 라이브러리를 말하며,
알고리즘, 컨테이너, 함수자, 반복자라고 불리는 네 가지의 구성 요소로 구성되어 있다.

그리고 STL 컨테이너란 다른 객체나 원소들을 보관하는 객체를 말하며,
연속 컨테이너, 연관 컨테이너, 컨테이너 어댑터로 구분 할 수 있다.

2. 연속 컨테이너

연속 컨테이너란 모든 원소가 메모리 상에서 순서대로 배치되는 컨테이너를 말하고
모든 원소가 순서대로 배치되므로 특정 위치에 대한 참조가 가능하다는 특징이 있다.

1) vector

vector란 원소의 삽입, 삭제가 뒤쪽에서만 가능한 배열 기반 컨테이너를 말한다.

(1) vector의 생성자

#include <vector>

vector<type> name;

(2) vector의 메소드

  • front : vector의 첫 번째 원소를 참조한다.
  • back : vector의 마지막 원소를 참조한다.
  • begin : vector의 첫 번째 원소를 가리키는 반복자를 반환한다.
  • end : vector의 마지막 원소를 가리키는 반복자를 반환한다.
  • push_back : vector의 마지막에 원소를 추가한다.
  • pop_back : vector의 마지막 원소를 제거한다.
  • clear : vector의 모든 원소를 제거한다.

2) deque

deque란 원소의 삽입, 삭제가 앞쪽과 뒤쪽에서 가능한 배열 기반 컨테이너를 말한다.

(1) deque의 생성자

#include <deque>

deque<type> name;

(2) deque의 메소드

  • front : deque의 첫 번째 원소를 참조한다.
  • back : deque의 마지막 원소를 참조한다.
  • begin : deque의 첫 번째 원소를 가리키는 반복자를 반환한다.
  • end : deque의 마지막 원소를 가리키는 반복자를 반환한다.
  • push_front : deque의 앞에 원소를 추가한다.
  • pop_front : deque의 첫 번째 원소를 제거한다.
  • push_back : deque의 마지막에 원소를 추가한다.
  • pop_back : deque의 마지막 원소를 제거한다.
  • clear : deque의 모든 원소를 제거한다.

3) list

list란 양방향으로 연결된 이중 연결 리스트인 노드 기반 컨테이너를 말한다.

(1) list의 생성자

#include <list>

list<type> name;

(2) list의 메소드

  • front : list의 첫 번째 원소를 참조한다.
  • back : list의 마지막 원소를 참조한다.
  • begin : list의 첫 번째 원소를 가리키는 반복자를 반환한다.
  • end : list의 마지막 원소를 가리키는 반복자를 반환한다.
  • push_front : list의 앞에 원소를 추가한다.
  • pop_front : list의 첫 번째 원소를 제거한다.
  • push_back : list의 마지막에 원소를 추가한다.
  • pop_back : list의 마지막 원소를 제거한다.
  • clear : list의 모든 원소를 제거한다.
  • sort : list의 모든 원소를 정렬한다.
  • unique : list의 인접한 원소의 값이 같은 경우 동일한 값을 가진 원소를 하나로 합친다.

3. 연관 컨테이너

연관 컨테이너란 관계있는 값을 묶어서 저장하는 컨테이너를 말하며,
모든 원소가 특정한 정렬 기준에 따라 자동으로 정렬된다는 특징이 있다.

1) set, multiset

set이란 원소가 key만 가지고 있으며, 중복된 원소를 허용하지 않는 컨테이너를 말하고,
multiset이란 set과 동일하지만 중복된 원소를 허용하는 컨테이너를 말한다.

(1) set, multiset의 생성자

#include <set>

set<type> name;
multiset<type> name;

(2) set, multiset의 메소드

  • size : set, multiset의 원소 개수를 반환한다.
  • empty : set, multiset가 비어있는지 확인한다.
  • begin : set, multiset의 시작을 가리키는 반복자를 반환한다.
  • end : set, multiset의 끝을 가리키는 반복자를 반환한다.
  • insert : set, multiset에 원소를 추가한다.
  • erase : set, multiset에서 원소를 삭제한다.
  • clear : set, multiset의 모든 원소를 제거한다.
  • find : set, multiset에서 원소를 찾아 반환한다.

2) map, multimap

map이란 key와 value를 쌍으로 가지며, key가 중복된 원소를 허용하지 않는 컨테이너를 말한다.
또한, multiamp이란 map과 동일하지만 key가 중복된 원소를 허용하는 컨테이너를 말한다.

(1) map, multimap의 생성자

#include <map>

map<type> name;
multimap<type> name;

(2) map, multimap의 메소드

  • size : map, multimap의 원소 개수를 반환한다.
  • empty : map, multimap가 비어있는지 확인한다.
  • begin : map, multimap의 시작을 가리키는 반복자를 반환한다.
  • end : map, multimap의 끝을 가리키는 반복자를 반환한다.
  • insert : map, multimap에 원소를 추가한다.
  • erase : map, multimap에서 원소를 삭제한다.
  • clear : map, multimap의 모든 원소를 제거한다.
  • find : map, multimap에서 원소를 찾아 반환한다.

4. 컨테이너 어댑터

컨테이너 어댑터란 기존의 컨테이너가 가진 기능을 변형해 만든 컨테이너를 말한다.
그리고 컨테이너 어댑터는 특정 형태의 동작만을 수행한다는 특징이 있다.

1) stack

stack이란 vector를 기반으로 만든 후입선출의 컨테이너를 말한다.

(1) stack의 생성자

#include <stack>

stack<type> name;

(2) stack의 메소드

  • size : stack의 원소 개수를 반환한다.
  • empty : stack이 비어있는지 확인한다.
  • top : stack의 마지막 원소를 참조한다.
  • push : stack의 마지막에 원소를 추가한다.
  • pop : stack의 마지막 원소를 제거한다.

2) queue

queue란 deque를 기반으로 만든 선입선출의 컨테이너를 말한다.

(1) queue의 생성자

#include <queue>

queue<type> name;

(2) queue의 메소드

  • size : queue의 원소 개수를 반환한다.
  • empty : queue가 비어있는지 확인한다.
  • front : queue의 첫 번째 원소를 참조한다.
  • back : queue의 마지막 원소를 참조한다.
  • push : queue의 마지막에 원소를 추가한다.
  • pop : queue의 첫 번째 원소를 삭제한다.

3) priority_queue

priority_queue란 vector를 기반으로 원소가 자동으로 정렬되도록 만든 컨테이너를 말한다.

(1) priority_queue의 생성자

#include <priority_queue>

priority_queue<type> name;

(2) priority_queue의 메소드

  • size : priority_queue의 원소 개수를 반환한다.
  • empty : priority_queue가 비어있는지 확인한다.
  • front : priority_queue의 첫 번째 원소를 참조한다.
  • back : priority_queue의 마지막 원소를 참조한다.
  • push : priority_queue의 마지막에 원소를 추가한다.
  • pop : priority_queue의 첫 번째 원소를 삭제한다.

참고 자료

0개의 댓글