본문 바로가기
C++

[C++] - STL(표준 템플릿 라이브러리)에 대하여

by 개발 고양이 2023. 12. 28.

STL이란?

STL이란, C++에서 제공하는 표준 템플릿 라이브러리 (Standard Template Library)이다. 간단히 말해, 다양한 자료구조와 알고리즘들을 템플릿으로 제공하는 라이브러리이다. STL에 포함되는 클래스와 함수들은 크게 3가지로 분류할 수 있는데, 컨테이너(container), 반복자(iterator), 알고리즘(algorithm)이다.  


컨테이너 (container)

자료구조를 구현해 놓은 클래스이다. 일반적으로 많이 알려진 리스트, 큐, 스택을 포함하여 다양한 자료구조들이 구현되어 있다. 컨테이너는 크게 3가지로 분류할 수 있다.

 

순차 컨테이너 (Sequence Container)

연속적인 메모리 공간에 순서대로 값을 저장한다. vector, deque, list 등이 있다. 

 

컨테이너 어댑터 (Container Adaptor)

다른 컨테이너를 변형시킨 것. stack, queue 등이 있다.

 

연관 컨테이너 (Associative Container) 

key를 이용하여 값을 저장 & 검색한다. 자동으로 자료를 정렬해주기 때문에 빠른 검색이 가능하다. set, map 등이 있다. 

 

 

 


많이 쓰이는 STL 컨테이너 종류

많이 쓰이는 STL 컨테이너 종류들을 나열해보았다. 각 STL의 사용법은 계속 포스팅하도록 하겠다. 

 

   vector

동적 배열을 일반화시킨 클래스이다. 1차원 배열과 거의 유사하게 사용할 수 있다. 맨 앞이나 맨 끝에서 삽입과 삭제를 하거나, 임의의 위치를 참조할 때 O(1)을 보장한다.

 

   deque

자료구조의 덱을 생각하면 된다. 맨 앞, 맨 뒤 모두 입력 가능한 클래스이다. 

 

   list

연결 리스트를 일반화한 클래스이다. 빠른 삽입/삭제가 가능하다. 

 

   set

값을 저장할 때 정렬되어 저장된다. 단 중복된 값은 저장이 불가능하다.

 

   map

딕셔너리를 일반화한 클래스이다. <key, value> 쌍을 정렬된 순서로 저장한다. 삽입, 삭제, 탐색은 O(log n)을 보장한다. 

 

   stack

스택을 일반화한 클래스이다. LIFO (Last In First Out) 성질을 가지고 있어 마지막에 삽입된 요소가 먼저 나간다. 

 

   queue

큐를 일반화한 클래스이다. FIFO (First In First Out) 성질을 가지고 있어 먼저 삽입된 요소가 먼저 나간다. 

 

 

 


반복자 (iterator)

반복자(iterator)란, 컨테이너의 원소들을 하나씩 순회하여 접근할 수 있는 포인터이다. iterator 변수를 선언하여 사용해야 한다. 반복문을 이용하여 컨테이너에 접근한 후, 원소를 가져오거나 특정 값을 검색할 때 활용 가능하다. 

  • begin() : 컨테이너의 첫 번째 원소에 대한 주소 반환
  • end() : 컨테이너의 마지막 원소에 대한 주소 반환

 

 


알고리즘 (Algorithm)

알고리즘이란 원소에 대하여 복사, 검색, 삭제, 정렬 등의 기능을 구현한 템플릿 함수이다.

  • copy : 복사
  • find, search : 검색
  • remove : 삭제
  • sort : 정렬