[C++] STL
STL(Standard Template Library)은 C++ 프로그래밍 언어의 표준 라이브러리로, 여러 가지 유용한 데이터 구조와 알고리즘을 제공하여 프로그래밍 작업을 더 효율적으로 수행할 수 있게 해준다. STL은 템플릿을 기반으로 구현되어 있어, 다양한 자료형에 대해 일반화된 코드를 작성할 수 있다. C++ 표준 라이브러리의 일부분이며, STL의 주요 구성 요소는 다음과 같다.
- 컨테이너 (Containers)
STL은 다양한 종류의 컨테이너를 제공한다. 컨테이너는 데이터를 저장하고 관리하는데 사용되며, 여러 가지 유형의 데이터 구조를 지원한다. 주요 컨테이너 종류로는 벡터(Vector), 덱(Deque), 리스트(List), 맵(Map), 세트(Set) 등이 있다. - 반복자 (Iterators)
반복자는 컨테이너의 요소를 반복적으로 접근하는데 사용된다. 컨테이너 내의 요소에 대한 접근을 추상화하여 일반화된 방식으로 처리할 수 있게 해준다. - 알고리즘 (Algorithms)
STL은 다양한 유용한 알고리즘을 제공한다. 정렬, 검색, 변환 등 다양한 작업을 수행하는 함수들이 포함되어 있다. 이러한 함수들은 다양한 컨테이너와 함께 사용할 수 있어 매우 편리하게 데이터를 처리할 수 있다. - 함수 객체 (Function Objects)
함수 객체는 함수처럼 동작하는 객체로, 주로 알고리즘에 사용된다. 함수 호출 연산자 ()를 오버로딩하여 동작을 정의하며, 일반 함수와 마찬가지로 인자를 받고 결과를 반환할 수 있다. - 할당자 (Allocators)
할당자는 메모리 할당과 해제를 컨트롤하는데 사용된다. 컨테이너가 메모리를 관리할 때 사용되며, 사용자 정의 메모리 관리 전략을 구현할 수 있다.
STL은 C++ 표준의 핵심 부분이며, 다양한 문제에 대한 간결하고 효율적인 솔루션을 제공한다. 개발자가 직접 자료 구조나 알고리즘을 구현할 필요 없이 이미 구현된 STL의 기능을 사용하여 개발 속도를 높이고 코드의 유지보수성을 높일 수 있다.
- 컨테이너
컨테이너는 데이터를 저장하고 관리하는 자료 구조를 나타내며, 다양한 유형의 데이터를 쉽게 조작할 수 있는 인터페이스를 제공한다. 각각의 컨테이너는 특정 작업에 최적화된 방식으로 데이터를 저장하고 접근할 수 있는 다양한 기능을 제공한다. STL 컨테이너는 다음과 같이 주요 분류로 나눌 수 있다.
- 순차 컨테이너 (Sequence Containers):
- 벡터(Vector): 동적 배열을 나타내며, 크기 조절 및 임의 접근이 가능하다다.
- 덱(Deque): 양쪽 끝에서 삽입과 삭제가 빠르게 가능한 더블 엔드 큐다.
- 리스트(List): 이중 연결 리스트로, 임의 위치에서의 삽입과 삭제가 빠르다.
- 포워드 리스트(Forward List): 단일 연결 리스트로, 단방향으로만 이동 가능하며 삽입과 삭제가 빠르다.
- 연관 컨테이너 (Associative Containers):
- 맵(Map): 키-값 쌍으로 데이터를 저장하며, 키를 기반으로 정렬되어 있다.
- 멀티맵(Multimap): 중복된 키를 허용하는 맵이다.
- 세트(Set): 정렬된 고유한 값을 저장한다.
- 멀티세트(Multiset): 중복된 값을 허용하는 세트이다.
- 컨테이너 어댑터 (Container Adapters):
- 스택(Stack): 후입선출(LIFO) 방식의 자료 구조로, 요소를 스택의 맨 위에 추가하거나 제거한다.
- 큐(Queue): 선입선출(FIFO) 방식의 자료 구조로, 요소를 큐의 뒤에 추가하고 앞에서 제거한다.
- 우선순위 큐(Priority Queue): 요소들이 우선순위에 따라 정렬되는 큐이다.
STL 컨테이너는 일반적인 인터페이스를 공유하며, 반복자(Iterators)를 통해 컨테이너 내의 데이터에 접근할 수 있다. 컨테이너의 크기 조절, 데이터 삽입, 삭제, 검색 등의 작업은 컨테이너 종류에 따라 다르게 제공된다. 컨테이너는 템플릿으로 구현되어 있어, 다양한 자료형에 대해 일반화된 코드를 작성할 수 있다. 이를 통해 개발자는 효율적이고 안정적인 데이터 구조를 쉽게 활용할 수 있다.
- 순차 컨테이너
STL(Standard Template Library)에서 순차 컨테이너는 데이터 요소를 선형으로 저장하는 자료 구조를 나타낸다. 이러한 컨테이너들은 데이터를 순차적으로 나열하며, 요소 간의 순서가 중요하다. STL에서 제공하는 주요 순차 컨테이너는 다음과 같다
- 벡터(Vector)
동적 배열을 나타내는 컨테이너로, 배열과 비슷한 특징을 가지면서도 크기를 동적으로 조절할 수 있는 특징을 가진다. 이로 인해 데이터를 효율적으로 관리하면서도 빠른 임의 접근을 제공할 수 있다.
임의 접근이 가능하며, 연속된 메모리 공간에 요소를 저장한다.
크기 조절 시에 메모리 재할당이 필요하므로 중간에 요소를 삽입/삭제하는 작업이 비효율적일 수 있다.