Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL 완벽 정리: 컨테이너, 알고리즘, 반복자의 모든 것

C++ STL(Standard Template Library, 표준 템플릿 라이브러리)은 벡터(vector), 리스트(list), 큐(queue), 스택(stack)처럼 널리 사용되는 알고리즘과 자료구조를 템플릿 기반으로 구현해 놓은 강력한 C++ 템플릿 클래스 집합입니다.

STL은 컨테이너 클래스, 알고리즘, 반복자로 이루어진 라이브러리입니다. 일반화(generalized) 라이브러리이기 때문에 모든 구성 요소가 매개변수화되어 있으며, STL을 제대로 활용하려면 템플릿 클래스에 대한 기본적인 이해가 필수적입니다.

템플릿(Template)은 C++ 프로그래밍 언어의 핵심 기능 중 하나로, 함수와 클래스가 다양한 자료형에 대해 동작할 수 있도록 해줍니다. 덕분에 자료형마다 코드를 새로 작성하지 않아도 하나의 함수나 클래스를 여러 타입에 그대로 재사용할 수 있습니다.

C++ 표준 템플릿 라이브러리는 다음과 같이 잘 구조화된 세 가지 핵심 구성 요소로 이루어져 있습니다.

1. 컨테이너(Container)

컨테이너는 특정 종류의 객체들을 모아 관리하는 데 사용됩니다. deque, list, vector, map 등 다양한 종류의 컨테이너가 제공되며, 크게 네 가지 유형으로 나눌 수 있습니다.

  • 시퀀스 컨테이너(Sequence Containers) - 데이터를 순차적으로 접근할 수 있는 자료구조를 구현합니다.

    • vector
    • list
    • deque
    • array
    • forward_list
  • 컨테이너 어댑터(Container Adaptors) - 시퀀스 컨테이너에 대해 서로 다른 인터페이스를 제공합니다.

    • queue
    • priority_queue
    • stack
  • 연관 컨테이너(Associative Containers) - 정렬된 자료구조를 구현하여 빠른 검색(O(log n) 복잡도)이 가능합니다.

    • set
    • multiset
    • map
    • multimap
  • 정렬되지 않은 연관 컨테이너(Unordered Associative Containers) - 정렬되지 않은 자료구조를 구현하며, 해시 기반으로 빠른 검색을 지원합니다.

    • unordered_set
    • unordered_multiset
    • unordered_map
    • unordered_multimap

2. 알고리즘(Algorithm)

알고리즘은 컨테이너 위에서 동작합니다. 컨테이너의 내용을 초기화하고, 정렬하고, 검색하고, 변환하는 등의 작업을 손쉽게 수행할 수 있는 수단을 제공합니다.

주요 알고리즘 분류

  • 정렬(Sorting)
  • 검색(Searching)
  • 핵심 STL 알고리즘
  • 유용한 배열(Array) 알고리즘
  • 파티션(Partition) 연산

3. 반복자(Iterator)

반복자는 객체 컬렉션의 요소들을 한 단계씩 순회하며 접근하는 데 사용됩니다. 이때 컬렉션은 컨테이너 전체일 수도 있고, 컨테이너의 일부(부분집합)일 수도 있습니다.