[STL] STL이란?

......·2023년 12월 1일

STL

목록 보기
1/8

STL이 무엇인지, 어떤것들을 말하는지 알아보자

STL이란?

  • C++의 표준 라이브러리의 일부분으로, Standard Template Library의 악자
  • 자료구조와 알고리즘을 템플릿으로 제공하는 라이브러리

STL의 구성요소

  • 컨테이너(container) - 객체를 저장하는 객체, 컬렉션 또는 자료구조라고 부름
  • 반복자(iterator) - 컨테이너의 원소를 가르키며 해당 원소에 접근하여 다음 원소를 가리키는 기능
  • 알고리즘(algorithm) - 정렬, 삭제, 연산 등 일반적인 함수 템플릿
  • 함수 객체(function object) - 함수처럼 동작하는 객체로 오버로딩을 이용하여 컨테이너와 알고리즘에 클라이언트 정책을 반영
  • 어댑터(adaptor) - 구성 요소의 인터페이스를 변경해 새로운 인터페이스를 갖는 구성요소로 변경하는 기능
  • 할당기(allocator) - 컨테이너의 메모리 할당 정책을 캡슐화한 클래스 객체

컨테이너

  • 같은 타입을 저장, 관리할 목적으로 만들어진 클래스

표준 시퀀스 컨테이너(standard sequence container)

  • 컨테이너 원소가 자신만의 삽입 위치(순서)를 가지는 컨테이너(벡터, 덱, 리스트 / 선형적)

표준 연관 컨테이너(standard associative container)

  • 저장 원소가 삽입 순서와 다르게 특정 정렬 기준에 의해 자동 정렬되는 컨테이너(set, map / 비선형적)
    업로드중..

배열 기반 컨테이너(array-based container)

  • 데이터 여러 개가 하나의 메모리 단위에 저장(벡터, 덱)

노드 기반 컨테이너(node-based container)

  • 데이터 하나를 하나의 메모리 단위에 저장(리스트, set, map)
    업로드중..

반복자

  • 포인터와 비슷하게 동작
  • 컨테이너와 알고리즘이 하나로 동작하게 묶어주는 인터페이스 역할
  • 반복자로 인해 알고리즘이 특정 컨테이너에 종속적이지 않고 독립적, 컨테이너와 결합하여 동작

반복자의 특징

  • 반복자는 컨테이너 내부의 원소(객체)를 가리키고 접근할 수 있어야 함('*' 연산자 제공)
  • 다음 원소로 이동하고 컨테이너의 모든 원소를 순회할 수 있어야 함(증감, 비교 연산자 제공)

반복자의 범주

  • 입력 반복자(input iterator) - 현 위치의 원소를 한 번만 읽을 수 있는 반복자 / istream
  • 출력 반복자(output iterator) - 현 위치의 원소를 한 번만 쓸 수 있는 반복자 / ofstream
  • 순방향 반복자(forward iterator) - 입력, 출력 반복자 기능에 순방향으로 이동(++)이 가능한 재할당될 수 있는 반복자
  • 양방향 반복자(bidirectional iterator) - 순방향 반복자 기능에 역방향으로 이동(--)이 가능한 반복자 / list, set, multiset, map, multimap
  • 임의 접근 반복자(random access iterator) - 양방향 반복자 기능에 +, -, +=, -=, [] 연산이 가능한 반복자 / vector, deque

알고리즘

< 7가지 범주로 분류 >

  • 원소를 수정하지 않는 알고리즘
  • 원소를 수정하는 알고리즘
  • 제거 알고리즘
  • 변경 알고리즘
  • 정렬 알고리즘
  • 정렬된 범위 알고리즘
  • 수치 알고리즘

함수 객체

  • 클라이언트가 정의한 동작을 다른 구성 요소에 반영하려 할 때 사용

어댑터

  • 구성 요소의 인터페이스를 변경

STL 어댑터

  • 컨테이너 어댑터 : 스택, 큐, 우선순위 큐
  • 반복자 어댑터 : 역방향 반복자, front or back insert반복자
  • 함수 어댑터 : 바인더, 부정자, 함수 포인터 어댑터

할당기

  • 컨테이너의 메모리 할당 정보와 정책을 캡슐화한 구성요소

0개의 댓글