장영현 2023. 8. 11. 14:34
728x90

STL(Standard Template Library)은 C++ 프로그래밍 언어의 표준 라이브러리로, 여러 가지 유용한 데이터 구조와 알고리즘을 제공하여 프로그래밍 작업을 더 효율적으로 수행할 수 있게 해준다. STL은 템플릿을 기반으로 구현되어 있어, 다양한 자료형에 대해 일반화된 코드를 작성할 수 있다. C++ 표준 라이브러리의 일부분이며, STL의 주요 구성 요소는 다음과 같다.

 

  1. 컨테이너 (Containers)

    STL은 다양한 종류의 컨테이너를 제공한다. 컨테이너는 데이터를 저장하고 관리하는데 사용되며, 여러 가지 유형의 데이터 구조를 지원한다. 주요 컨테이너 종류로는 벡터(Vector), 덱(Deque), 리스트(List), 맵(Map), 세트(Set) 등이 있다.
  2. 반복자 (Iterators)

    반복자는 컨테이너의 요소를 반복적으로 접근하는데 사용된다. 컨테이너 내의 요소에 대한 접근을 추상화하여 일반화된 방식으로 처리할 수 있게 해준다.

  3. 알고리즘 (Algorithms)

    STL은 다양한 유용한 알고리즘을 제공한다. 정렬, 검색, 변환 등 다양한 작업을 수행하는 함수들이 포함되어 있다. 이러한 함수들은 다양한 컨테이너와 함께 사용할 수 있어 매우 편리하게 데이터를 처리할 수 있다.

  4. 함수 객체 (Function Objects)

    함수 객체는 함수처럼 동작하는 객체로, 주로 알고리즘에 사용된다. 함수 호출 연산자 ()를 오버로딩하여 동작을 정의하며, 일반 함수와 마찬가지로 인자를 받고 결과를 반환할 수 있다.

  5. 할당자 (Allocators)

    할당자는 메모리 할당과 해제를 컨트롤하는데 사용된다. 컨테이너가 메모리를 관리할 때 사용되며, 사용자 정의 메모리 관리 전략을 구현할 수 있다.

 

STL은 C++ 표준의 핵심 부분이며, 다양한 문제에 대한 간결하고 효율적인 솔루션을 제공한다. 개발자가 직접 자료 구조나 알고리즘을 구현할 필요 없이 이미 구현된 STL의 기능을 사용하여 개발 속도를 높이고 코드의 유지보수성을 높일 수 있다.

 


  • 컨테이너

컨테이너는 데이터를 저장하고 관리하는 자료 구조를 나타내며, 다양한 유형의 데이터를 쉽게 조작할 수 있는 인터페이스를 제공한다. 각각의 컨테이너는 특정 작업에 최적화된 방식으로 데이터를 저장하고 접근할 수 있는 다양한 기능을 제공한다. STL 컨테이너는 다음과 같이 주요 분류로 나눌 수 있다.

 

  1. 순차 컨테이너 (Sequence Containers):

    1. 벡터(Vector): 동적 배열을 나타내며, 크기 조절 및 임의 접근이 가능하다다.
    2. 덱(Deque): 양쪽 끝에서 삽입과 삭제가 빠르게 가능한 더블 엔드 큐다.
    3. 리스트(List): 이중 연결 리스트로, 임의 위치에서의 삽입과 삭제가 빠르다.
    4. 포워드 리스트(Forward List): 단일 연결 리스트로, 단방향으로만 이동 가능하며 삽입과 삭제가 빠르다.

  2. 연관 컨테이너 (Associative Containers):

    1. 맵(Map): 키-값 쌍으로 데이터를 저장하며, 키를 기반으로 정렬되어 있다.
    2. 멀티맵(Multimap): 중복된 키를 허용하는 맵이다.
    3. 세트(Set): 정렬된 고유한 값을 저장한다.
    4. 멀티세트(Multiset): 중복된 값을 허용하는 세트이다.
  3. 컨테이너 어댑터 (Container Adapters):

    1. 스택(Stack): 후입선출(LIFO) 방식의 자료 구조로, 요소를 스택의 맨 위에 추가하거나 제거한다.
    2. 큐(Queue): 선입선출(FIFO) 방식의 자료 구조로, 요소를 큐의 뒤에 추가하고 앞에서 제거한다.
    3. 우선순위 큐(Priority Queue): 요소들이 우선순위에 따라 정렬되는 큐이다.

STL 컨테이너는 일반적인 인터페이스를 공유하며, 반복자(Iterators)를 통해 컨테이너 내의 데이터에 접근할 수 있다. 컨테이너의 크기 조절, 데이터 삽입, 삭제, 검색 등의 작업은 컨테이너 종류에 따라 다르게 제공된다. 컨테이너는 템플릿으로 구현되어 있어, 다양한 자료형에 대해 일반화된 코드를 작성할 수 있다. 이를 통해 개발자는 효율적이고 안정적인 데이터 구조를 쉽게 활용할 수 있다.

 


  • 순차 컨테이너

STL(Standard Template Library)에서 순차 컨테이너는 데이터 요소를 선형으로 저장하는 자료 구조를 나타낸다. 이러한 컨테이너들은 데이터를 순차적으로 나열하며, 요소 간의 순서가 중요하다. STL에서 제공하는 주요 순차 컨테이너는 다음과 같다

 

  • 벡터(Vector)

동적 배열을 나타내는 컨테이너로, 배열과 비슷한 특징을 가지면서도 크기를 동적으로 조절할 수 있는 특징을 가진다. 이로 인해 데이터를 효율적으로 관리하면서도 빠른 임의 접근을 제공할 수 있다.
임의 접근이 가능하며, 연속된 메모리 공간에 요소를 저장한다.
크기 조절 시에 메모리 재할당이 필요하므로 중간에 요소를 삽입/삭제하는 작업이 비효율적일 수 있다.