ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] STL 종류
    프로그래밍/C & C++ 2024. 7. 6. 00:05
    728x90
    반응형

    C++의 표준 템플릿 라이브러리(STL)는 여러 종류의 제네릭 컨테이너, 알고리즘, 이터레이터 및 함수 객체를 포함하고 있습니다. STL의 주요 구성 요소는 다음과 같습니다:

    1. 컨테이너(Container)
    2. 알고리즘(Algorithm)
    3. 이터레이터(Iterator)
    4. 함수 객체(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
Designed by Tistory.