ONRECU
article thumbnail

STL이란 Standard Template Library의 약자로,

자료구조를 따로 구현하지 않아도 사용할 수 있도록 만든 편의용 라이브러리다.

매우 편하고 방대하기 때문에 없어서는 안 될 귀중한 존재이다. 양이 매우 많아 모두 다룰 수 없으므로 자주 사용하는 몇 가지만 정리한다.

표준 STL은 std namespace 내에 존재하므로 사용 시 명시해주어야 한다.

STL이 제공해주는 기능은 대략적으로 다음과 같다.

  • 자료구조 : List, Stack, Queue, Tree, Hash 등
  • 알고리즘 : Sort, Binary tree, Heap opration 등
  • 기타 유틸리티(날짜, 시간), Thread, Concurrency 등

STL의 중요 요소 중 컨테이너 / 반복자 / 알고리즘에 대해 간단히 정리한다.


컨테이너(Container)

  • 컨테이너란, 자료구조(Linked List, Stack, Queue, Tree, Hash 등)를 지칭하는 단어이다.
  • 정확한 종류는 link
  • STL의 컨테이너가 지니는 공통적인 특징은 다음과 같다.
    1. 대부분 멤버 함수의 이름이 동일하다.
      • push_front(), push_back(), pop_front(), insert()
      • 위와 같은 함수를 공유하기 때문에, 함수명을 수정하지 않고 컨테이너를 통째로 바꿀 수 있다.
    2. 제거와 반환을 동시에 하지 않는다.
      • pop_front()pop_back() 함수는 제거만 하고 front()back()반환만 한다.
      • 그런 이유로 int n1 = v.pop_back()과 같은 코드가 있을 때, pop_back()의 리턴값은 void이기 때문에(제거만 하므로) 에러가 나게 된다.
 

Containers library - cppreference.com

Thread safety All container functions can be called concurrently by different threads on different containers. More generally, the C++ standard library functions do not read objects accessible by other threads unless those objects are directly or indirectl

en.cppreference.com

반복자 (Iterator)

  • 배열의 요소에 접근하는 방법은 크게 두 가지가 있다. (1) 배열의 연산자를 사용하거나 (2) 포인터를 사용하는 것이다.
  • 반복자는 (2)번의 포인터 접근 방법과 유사하게 동작하는 객체로, 컨테이너의 모슨 요소를 순차적으로 접근한다.
  • 대표적으로 begin()end() 함수가 있는데, 컨테이너의 시작과 끝 다음의 요소를 가리킨다.
    • end()가 끝 요소가 아니라 끝 다음의 요소를 가리키는데 주의해야 한다. 보통 컨테이너의 끝에 도달했는지 확인하는 용도로 사용한다.
    • Array나 Vector같이 연속된 메모리에 저장되는 컨테이너가 아니어도 작동하기 때문에 편리하다.

알고리즘 (Algorithm)

  • STL의 알고리즘을 다룰 때 의외인 점은 멤버 함수가 아닌 일반 함수로 제공된다는 점이다. 어차피 같은 기능인데, 멤버 함수로 만들면 일일이 다 만들어야 하기 때문이다.
  • 이런 이유로 자료구조의 종류와 상관없이 사용할 수 있다. 자세한 종류는 link
  • 항상 코드를 작성하기 전, 내가 하고 싶은 일을 미리 구현해 둔 알고리즘이 없는지 검색하는 습관이 들어야 한다.
 

Algorithms library - cppreference.com

The algorithms library defines functions for a variety of purposes (e.g. searching, sorting, counting, manipulating) that operate on ranges of elements. Note that a range is defined as [first, last) where last refers to the element past the last element to

en.cppreference.com


'C++' 카테고리의 다른 글

[C++] Global, Static 키워드 이해  (0) 2022.12.30
[C++] 람다식 (Lambda Expression) 만드는 순서 암기용  (0) 2022.12.25