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

C++ 표준 템플릿 라이브러리(STL) 핵심 정리: 컨테이너, 반복자, 알고리즘

C++ 표준 템플릿 라이브러리(STL, Standard Template Library)는 C++ 프로그래밍 언어를 위한 소프트웨어 라이브러리로, C++ 표준 라이브러리의 여러 부분에 큰 영향을 미쳤습니다. STL은 알고리즘(Algorithms), 컨테이너(Containers), 함수(Functions), 반복자(Iterators)라는 네 가지 핵심 구성 요소를 제공합니다.

흥미로운 점은 'STL' 또는 'Standard Template Library'라는 용어가 ISO 14882 C++ 표준 문서 어디에도 등장하지 않는다는 사실입니다. 따라서 C++ 표준 라이브러리를 단순히 STL이라고 부르는 것은 정확하지 않으며, STL과 C++ 표준 라이브러리는 서로 다른 개념입니다. 다만 STL은 C++ 표준 라이브러리의 부분집합(subset)이라고 이해하면 됩니다.

1. 컨테이너(Containers)

컨테이너는 데이터를 저장하는 객체로, STL은 크게 시퀀스 컨테이너연관 컨테이너를 제공합니다.

시퀀스 컨테이너

표준 시퀀스 컨테이너에는 vector, deque, list가 있습니다. 각각 동적 배열, 양방향 큐, 이중 연결 리스트 방식으로 데이터를 순차적으로 관리합니다.

연관 컨테이너

표준 연관 컨테이너에는 set, multiset, map, multimap이 있으며, 여기에 해시 기반 변형인 hash_set, hash_map, hash_multiset, hash_multimap도 포함됩니다.

컨테이너 어댑터

이 외에도 queue, priority_queue, stack 같은 컨테이너 어댑터가 있습니다. 이들은 특정 인터페이스를 제공하는 컨테이너로, 내부적으로는 다른 컨테이너를 구현체로 활용합니다.

2. 반복자(Iterators)

반복자는 프로그래머가 컨테이너를 순회(traverse)할 수 있도록 해주는 객체입니다. STL은 다섯 가지 유형의 반복자를 구현합니다.

  • 입력 반복자(Input Iterator): 값의 시퀀스를 읽는 데 사용됩니다.
  • 출력 반복자(Output Iterator): 값의 시퀀스를 쓰는 데 사용됩니다.
  • 순방향 반복자(Forward Iterator): 읽기와 쓰기가 모두 가능하며, 앞으로만 이동할 수 있습니다.
  • 양방향 반복자(Bidirectional Iterator): 순방향 반복자와 같지만 뒤로도 이동할 수 있습니다.
  • 임의 접근 반복자(Random Access Iterator): 한 번의 연산으로 임의의 거리만큼 자유롭게 이동할 수 있습니다.

반복자는 STL의 일반성(generality)을 가능하게 하는 핵심 기능입니다. 덕분에 동일한 알고리즘을 서로 다른 컨테이너에 그대로 적용할 수 있습니다.

3. 알고리즘(Algorithms)

STL의 알고리즘은 요소들의 범위(range)에 사용하도록 특별히 설계된 함수들의 모음입니다. 여기서 범위란 반복자나 포인터를 통해 접근할 수 있는 객체의 시퀀스를 의미하며, 배열이나 STL 컨테이너의 인스턴스가 대표적인 예입니다.

대표적인 STL 알고리즘은 다음과 같습니다.

  • sort: 지정된 범위의 요소를 정렬합니다.
  • binary_search: 정렬된 시퀀스에서 특정 값의 존재 여부를 검사합니다.
  • min_element: 범위 내에서 가장 작은 요소를 반환합니다.

주목할 만한 점은 이러한 알고리즘들이 템플릿으로 허용되는 모든 데이터 타입에 적용될 수 있다는 것입니다. 이것이 바로 STL이 강력한 이유 중 하나입니다.