본문 바로가기

C++

[C++] STL의 개념, 구성요소, 특징, 장단점

1. STL(Standard Template Library)의 등장

  • C++은 표준 라이브러리를 가지고 있는다.
  • 이를 이용해 직접 특정 기능을 작성하지 않고 제공되는 함수를 통해 손쉽게 기능을 구현할 수 있다.
  • 그리고 1994년 7월에 C++ 표준 라이브러리에 STL이 추가되었다.

 

2. STL의 개념

  • STL의 사전적 의미는 표준 템플릿 라이브러리다.
  • 템플릿의 특징은 하나의 코드로 여러 결과를 보여준다.
  • STL의 모든 코드가 템플릿으로 되어 있다.
  • STL은 기본 개념은 이미 구현되어 있는 공통적인 기능을 쉽게 사용하는 것이다.

 

3. STL 구성 요소

STL은 크게 컨테이너, 반복자, 알고리즘, 함수자로 구성되어 있다.

 

3-1 컨테이너

 

순차 컨테이너 : 동일한 객체가 선형으로 구성된 집합. 실행 시에 동적으로 크기를 변경 가능하다.

순차 컨테이너 설명
벡터(vector) 구성 요소에 임의로 접근할 수 있다. 집합의 끝에 삽입 및 삭제는 빠르게 처리되지만, 처음이나 중간의 삽입 및 삭제는 요소들의 개수에 따라 처리 속도가 증가한다.
데크(deque) 구성 요소에 임의로 접근할 수 있다. 집합의 양끝에 발생하는 삽입, 삭제를 빠르게 처리하지만, 중간의 삽입 및 삭제는 해당 위치에서 양끝까지의 개수에 따라 처리 속도가 증가한다.
리스트(list) 구성 요소에 선형적으로 접근한다. 집합 내의 어느 요소나 삽입과 삭제가 같은 처리 속도에 접근할 수 있다.

 

 

정렬 연관 컨테이너 : key를 이용하여 데이터를 신속하게 찾아낸다. 실행 시 동적으로 변경할 수 있다.

정렬 연관 컨테이너 설명
셋(set) 집합에는 키만 저장할 수 있다. 키는 중복을 허용하지 않으므로, 원하는 키를 빠르게 찾을 수 있다.
멀티셋(multiset) 셋과의 차이는 중복을 허용한다. 2개 이상의 복사본을 가진다.
맵(map) 집합에 키와 데이터를 같이 관리한다. 키는 중복을 허용하지 않고, 키를 이용하여 객체를 빠르게 찾아낸다.
멀티맵(multimap) 키의 중복을 허용한다. 2개 이상의 복사본을 가진다.

 

 

3-2 반복자

  • 컨테이너의 요소로를 가리키는 객체로, 컨테이너의 시작 끝을 이동하며 요소를 읽거나 쓸 때 사용한다.
  • 입력(input) : 입력 반복자는 읽기 전용
  • 출력(output) : 출력 반복자는 쓰기 전용
  • 순방향(forward) : 한쪽 방향으로 순회 (입력, 출력 반복자 기능 모두 포함)
  • 양방향(bidrectional) : 양방향으로 순회 (순방향 기능 모두 포함)
  • 임의접근(random access) : 컨테이너의 모든 요소에 접근 소요시간이 동일 (양방향 기능 모두 포함)

 

3-3 알고리즘

 

1. 변경 불가 순차 알고리즘

2. 변경 가능 순차 알고리즘

3. 순차 관련 알고리즘

4. 범용 수치 알고리즘

 

 

3-4 함수자

  • 함수 객체로도 불리며, 0개 이상의 인자를 받아서 알고리즘의 기본 동작을 변형하거나 확장시켜주는 객체다.
  • 산술 연산, 비교 연산, 논리 연산에 대한 함수자들을 제공한다.
  • 산술 연산 함수자 : +, - , * /
  • 비교 연산 함수자 : ==, !=, >, <, >=, <=
  • 논리 연산 함수자 : &&, ||, !

 

 

4. STL의 장점

  • 일반화를 지원한다. 하나의 단일 알고리즘으로 여러 개의 컨테이너에 대해 동일한 작업이 가능하다.
  • 컴파일 타임의 매커니즘을 지원하므로 실행 시 효율의 저하가 거의 없다.
  • 객체 지향적이지 않다. 함수는 모두 전역 변수를 사용하고, 상속을 거의 하지 않는다.
  • 성능이 중요하므로 가상 함수와 같은 저성능 매커니즘을 사용하지 않는다.
  • 표준이므로 이식성이 좋다.
  • 소스 공개로 확장성이 좋다.

 

5. STL의 단점

  • 템플릿 기반으로 함수와 클래스가 매번 구체화되어 소스가 커진다.
  • 가독성이 떨어진다.
  • 예외 처리가 어렵다.

 

 

참고문헌

C++ 프로그래밍과 STL / 이창현 지음