-
[C++] STL 종류프로그래밍/C & C++ 2024. 7. 6. 00:05728x90반응형
C++의 표준 템플릿 라이브러리(STL)는 여러 종류의 제네릭 컨테이너, 알고리즘, 이터레이터 및 함수 객체를 포함하고 있습니다. STL의 주요 구성 요소는 다음과 같습니다:
- 컨테이너(Container)
- 알고리즘(Algorithm)
- 이터레이터(Iterator)
- 함수 객체(Function Object 또는 Functor)
각 구성 요소에 대해 자세히 설명하겠습니다.
1. 컨테이너 (Containers)
컨테이너는 데이터를 저장하고 관리하는데 사용되는 클래스 템플릿입니다. STL 컨테이너는 세 가지 주요 카테고리로 나뉩니다:
순차 컨테이너 (Sequence Containers)
순차 컨테이너는 요소를 순서대로 저장합니다.
std::vector
: 동적 배열. 크기가 자동으로 조정되며, 임의 접근이 가능합니다.std::deque
: 양쪽 끝에서 빠른 삽입과 삭제가 가능한 동적 배열.std::list
: 이중 연결 리스트. 임의 접근은 느리지만, 중간 삽입과 삭제가 빠릅니다.std::forward_list
: 단일 연결 리스트. 메모리 사용량이 적고, 단방향으로 순회 가능합니다.std::array
: 고정 크기 배열. C 스타일 배열을 감싸는 컨테이너.std::string
: 문자열을 저장하고 조작하는 컨테이너.
연관 컨테이너 (Associative Containers)
연관 컨테이너는 특정 키를 사용하여 요소를 저장합니다. 요소들은 자동으로 정렬됩니다.
std::set
: 유일한 키를 저장하는 집합.std::multiset
: 중복 키를 허용하는 집합.std::map
: 키-값 쌍을 저장하는 연관 배열.std::multimap
: 중복 키를 허용하는 연관 배열.
비순차 컨테이너 (Unordered Containers)
비순차 컨테이너는 해시 테이블을 사용하여 요소를 저장합니다.
std::unordered_set
: 유일한 키를 저장하는 집합. 순서는 정의되지 않음.std::unordered_multiset
: 중복 키를 허용하는 집합. 순서는 정의되지 않음.std::unordered_map
: 키-값 쌍을 저장하는 연관 배열. 순서는 정의되지 않음.std::unordered_multimap
: 중복 키를 허용하는 연관 배열. 순서는 정의되지 않음.
2. 알고리즘 (Algorithms)
알고리즘은 컨테이너에 저장된 데이터를 조작하는 함수 템플릿입니다. STL 알고리즘은 세 가지 주요 카테고리로 나뉩니다:
비변형 알고리즘 (Non-modifying Algorithms)
컨테이너의 요소를 변경하지 않고 조작합니다.
std::for_each
: 각 요소에 대해 함수 호출.std::find
: 특정 값을 찾습니다.std::count
: 특정 값의 개수를 셉니다.std::equal
: 두 범위가 동일한지 확인합니다.
변형 알고리즘 (Modifying Algorithms)
컨테이너의 요소를 변경합니다.
std::copy
: 한 범위의 요소를 다른 범위로 복사합니다.std::transform
: 한 범위의 요소에 대해 함수를 적용하고 결과를 다른 범위에 저장합니다.std::replace
: 특정 값을 다른 값으로 대체합니다.std::remove
: 특정 값을 제거합니다.
정렬 알고리즘 (Sorting Algorithms)
컨테이너의 요소를 정렬합니다.
std::sort
: 범위를 정렬합니다.std::partial_sort
: 부분적으로 정렬합니다.std::nth_element
: 특정 위치의 요소를 정렬된 상태로 만듭니다.std::binary_search
: 이진 검색을 수행합니다.
3. 이터레이터 (Iterators)
이터레이터는 컨테이너의 요소를 순회하는 객체입니다. STL은 여러 유형의 이터레이터를 제공합니다:
- 입력 이터레이터 (Input Iterator): 데이터를 읽기 위해 사용합니다.
- 출력 이터레이터 (Output Iterator): 데이터를 쓰기 위해 사용합니다.
- 전진 이터레이터 (Forward Iterator): 한 방향으로만 전진할 수 있습니다.
- 양방향 이터레이터 (Bidirectional Iterator): 앞뒤로 이동할 수 있습니다.
- 임의 접근 이터레이터 (Random Access Iterator): 임의의 위치에 빠르게 접근할 수 있습니다.
4. 함수 객체 (Function Objects 또는 Functors)
함수 객체는 함수처럼 동작하는 객체입니다. 일반적으로 연산자 오버로딩을 통해 구현됩니다.
예시:
#include <iostream> #include <vector> #include <algorithm> struct Square { void operator()(int& n) { n *= n; } }; int main() { std::vector<int> vec = {1, 2, 3, 4}; std::for_each(vec.begin(), vec.end(), Square()); for (int val : vec) { std::cout << val << " "; } std::cout << std::endl; return 0; }
위 예제에서
Square
함수 객체는 벡터의 각 요소를 제곱합니다.요약
STL은 다양한 컨테이너, 알고리즘, 이터레이터, 함수 객체를 제공하여, 타입에 독립적인 제네릭 프로그래밍을 가능하게 합니다. 이를 통해 코드의 재사용성, 유연성, 유지보수성을 크게 향상시킬 수 있습니다.
728x90반응형'프로그래밍 > C & C++' 카테고리의 다른 글
[C++] Auto (0) 2024.07.07 [C++] 상수형 메서드 (0) 2024.07.06 [C++] 제네릭 프로그래밍 (0) 2024.07.05 [C++] 템플릿 (0) 2024.07.05 [C++] 이동 의미론(Move Semantics) (0) 2024.07.05