☁ C++에서 자연스럽게 숨 쉬듯(?) 사용하는 STL에 대한 정리이다.
STL(Standard Template Library)란?
STL은 표준 템플릿 라이브러리 (Standard Template Library)의 약자이다.
STL은 C++ 표준 라이브러리에 포함된 라이브러리로, 데이터구조와 알고리즘을 제공하는 템플릿 기반의 구성 요소들로 이루어져 있다.
주요 구성은 컨테이너(Container), 반복자(Iterator), 알고리즘(Algorithm)로, 3가지로 이루어져 있다.
이들을 조합하여 복잡한 작업을 간단하게 구현할 수 있다.
(아래에서 STL의 3가지 구성 요소에 대해 더 알아볼 예정이다.)
C++의 STL는 강력하고 유연한 라이브러리로, C++ 프로그래밍의 생산성을 크게 향상시킨다.
보다 더 효율적이고 유지보수하기 쉬운 코드를 작성하기 위해선 잘 활용할 필요가 있다.
🔎 TMI
Microsoft 공식 문서를 보면 아래처럼 쓰여있다.
" Microsoft의 C++ 표준 라이브러리 구현을 STL 또는 표준 템플릿 라이브러리라고도 합니다.
C++ 표준 라이브러리는 ISO 14882에 정의된 대로 라이브러리의 공식 이름이지만 검색 엔진에서 "STL" 및 "표준 템플릿 라이브러리"가 널리 사용되기 때문에 이러한 이름을 사용하여 설명서를 더 쉽게 찾을 수 있습니다. "
C++ 표준 라이브러리가 공식 이름인듯하지만 오래전부터 STL이라고 사용해 왔어서 그런지 검색엔진에서 STL로 사용하라고 친절하게 설명이 되어있다. ☺
컨테이너 (Container)
컨테이너(Container)는 데이터를 저장하고 관리하는 클래스 템플릿이다.
다양한 데이터 구조를 제공하여, 데이터를 저장하고 조작할 수 있게 돕는다.
컨테이너 예시
- std::vector
- std::list
- std::deque
- std::set
- std::map
- std::stack
- std::queue 등이 있다.
컨테이너는 데이터 저장 방식과 접근 방식에 따라 아래처럼 분류할 수 있다.
- 순차 컨테이너 (Sequence Container)
- std::vector, std::list, std::deque, std::array(C++11부터 도입) 등
- 연관 컨테이너 (Associative Container)
- std::set, std::map, std::multiset, std::multimap, std::unordered_set(C++11부터 도입), std::unordered_map(C++11부터 도입) 등
- 컨테이너 어댑터 (Container Adapter)
- std::stack, std::queue, std::priority_queue 등
반복자 (이터레이터, Iterator)
반복자(이터레이터, Iterator)는 컨테이너의 요소를 순회하거나 접근하는 데 사용되는 객체이다.
포인터와 유사한 기능을 한다고 생각하면 된다.
STL의 알고리즘과 컨테이너는 반복자를 통해 상호작용 한다.
반복자의 종류는 아래와 같다.
- 입력 반복자 (Input Iterator)
- 데이터를 읽는 데 사용
- 출력 반복자 (Output Iterator)
- 데이터를 쓰는 데 사용
- 순방향 반복자 (Forward Iterator)
- 읽기와 쓰기가 모두 가능 (요소를 한 방향으로 읽음)
- 양방향 반복자 (Bidirectional Iterator)
- 읽기와 쓰기가 모두 가능 (요소를 역방향으로 읽을 수 있음)
- 임의 접근 반복자 (Random Access Iterator)
- 양방향 반복자의 기능을 포함
- 임의의 위치로 이동할 수 있음 (배열처럼 인덱스를 이용하여 접근)
알고리즘 (Algorithm)
알고리즘(Algorithm)은 데이터를 처리하고 조작하는 함수들의 집합이다.
특정 조건에 따라 정렬, 검색, 변형 등의 작업을 한다.
일반적으로 범위를 정의하기 위해 반복자를 사용하며, 다양한 데이터 구조에서 적용할 수 있다.
<algorithm> 헤더파일에 정의되어 있다.
정렬 알고리즘 (Sorting Algorithm) 예시
- sort()
- 요소를 정렬
- reverse()
- 요소를 역순으로 정렬
검색 알고리즘 (Searching Algorithm) 예시
- find()
- 특정 값을 검색하여 해당 요소의 반복자를 반환
- binary_search()
- 이진 탐색을 사용하여 요소를 검색
- 정렬된 범위에서 사용 가능
변형 알고리즘 (Mutating Algorithm) 예시
- transform()
- 요소를 변형하여 다른 컨테이너에 저장
- replace()
- 특정 값을 다른 값으로 대체
수치 알고리즘 (Numeric Algorithm) 예시
- accumulate()
- 범위 내의 요소들을 누적하여 합을 계산
기타 유용한 알고리즘 예시
- count()
- 특정 값이 범위 내에서 등장하는 횟수를 계산
- max_element(), min_element()
- 최댓값과 최솟값을 찾는 함수
참고
https://learn.microsoft.com/ko-kr/cpp/standard-library/stl-containers?view=msvc-170
https://learn.microsoft.com/ko-kr/cpp/standard-library/iterators?view=msvc-170
https://learn.microsoft.com/ko-kr/cpp/standard-library/algorithms?view=msvc-170
'💻 Programming > C++' 카테고리의 다른 글
[C++/컴파일 에러] error: cannot jump from switch statement to this case label 에러 해결 및 원인 (0) | 2024.07.23 |
---|---|
[C++] STL vector 사용법 (0) | 2024.07.03 |
[C++] STL vector 정리 (0) | 2024.07.03 |