13.2. 프로그램언어 C++의 STL에 있는 주요 클래스와 함수들

프로그램언어 C++에서의 각각의 STL 컨테이너 클래스들

STL(Standard Template Library)은 C++ 표준 라이브러리의 일부로, 다양한 유용한 컨테이너 클래스를 제공합니다. 각각의 컨테이너 클래스는 특정한 데이터 구조를 구현하고, 데이터를 저장하고 관리하는데 사용됩니다.

1. vector

vector는 동적 배열을 구현한 컨테이너 클래스로, 크기를 동적으로 조절할 수 있습니다. 요소들은 연속적인 메모리 공간에 저장되어 있어 빠른 접근이 가능합니다.


#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    for (int i : vec) {
        std::cout << i << " ";
    }

    return 0;
}

2. list

list는 이중 연결 리스트를 구현한 컨테이너 클래스로, 요소들이 메모리상에 연결되어 있습니다. 임의 위치에서의 삽입 및 삭제가 빠르며, 순차적인 접근이 필요한 경우 유용합니다.

3. map

map은 key-value 쌍을 저장하는 연관 컨테이너 클래스로, key를 통해 value에 접근할 수 있습니다. 이진 검색 트리로 구현되어 있어 검색 및 삽입 연산이 빠릅니다.

4. set

set은 중복을 허용하지 않는 정렬된 컨테이너 클래스로, 이진 검색 트리로 구현되어 있습니다. 요소들은 자동으로 정렬되며, 중복된 요소를 삽입할 수 없습니다.

5. stack

stack은 후입선출(LIFO, Last In First Out) 구조를 따르는 스택을 구현한 컨테이너 클래스로, 요소의 삽입과 삭제가 스택의 규칙에 따라 이루어집니다.

6. queue

queue는 선입선출(FIFO, First In First Out) 구조를 따르는 큐를 구현한 컨테이너 클래스로, 요소의 삽입은 큐의 뒤쪽에서, 삭제는 앞쪽에서 이루어집니다.

프로그램언어 C++에서의 STL에서 제공하는 알고리즘 함수들

STL(Standard Template Library)은 C++ 표준 라이브러리의 일부로, 다양한 유용한 알고리즘 함수들을 제공합니다. 이러한 알고리즘 함수들은 컨테이너에 저장된 데이터를 처리하고 조작하는 데 도움이 됩니다.

STL의 알고리즘 함수들 중 일부는 다음과 같습니다:

  • std::sort: 컨테이너의 요소를 정렬합니다.
  • std::find: 특정 요소를 찾습니다.
  • std::count: 특정 값의 개수를 세어 반환합니다.
  • std::reverse: 요소의 순서를 뒤집습니다.
  • std::accumulate: 요소들을 누적하여 값을 반환합니다.

아래는 간단한 예제 코드입니다:


#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector numbers = {5, 2, 8, 1, 9};

    // 정렬
    std::sort(numbers.begin(), numbers.end());

    // 요소 찾기
    auto it = std::find(numbers.begin(), numbers.end(), 8);
    if (it != numbers.end()) {
        std::cout << "찾은 값: " << *it << std::endl;
    }

    // 값의 개수 세기
    int count = std::count(numbers.begin(), numbers.end(), 5);
    std::cout << "값 5의 개수: " << count << std::endl;

    // 요소 뒤집기
    std::reverse(numbers.begin(), numbers.end());

    // 누적 합 구하기
    int sum = std::accumulate(numbers.begin(), numbers.end(), 0);
    std::cout << "누적 합: " << sum << std::endl;

    return 0;
}

프로그램언어 C++에서의 STL의 이터레이터와 관련된 클래스 및 함수들

이터레이터는 C++ 표준 라이브러리(STL)에서 컨테이너의 요소에 접근하는데 사용되는 중요한 개념입니다. 이터레이터는 포인터와 유사하게 동작하여 컨테이너의 요소를 반복적으로 탐색하고 조작할 수 있습니다.

STL에서 제공하는 주요 이터레이터 관련 클래스와 함수는 다음과 같습니다:

  • std::iterator: 이터레이터를 위한 베이스 클래스로, 다른 이터레이터들이 상속받는 추상 클래스입니다.
  • std::begin(): 컨테이너의 첫 번째 요소를 가리키는 이터레이터를 반환합니다.
  • std::end(): 컨테이너의 마지막 다음 요소를 가리키는 이터레이터를 반환합니다.
  • std::advance(): 이터레이터를 특정 거리만큼 전진시키는 함수입니다.
  • std::next(): 현재 이터레이터에서 주어진 거리만큼 이동한 새로운 이터레이터를 반환합니다.
  • std::prev(): 현재 이터레이터에서 주어진 거리만큼 이전으로 이동한 새로운 이터레이터를 반환합니다.

이제 예제 코드를 통해 이터레이터를 사용하는 방법을 살펴보겠습니다:


#include 
#include 

int main() {
    std::vector numbers = {1, 2, 3, 4, 5};

    // begin()과 end()를 사용하여 벡터의 요소를 출력
    for (auto it = std::begin(numbers); it != std::end(numbers); ++it) {
        std::cout << *it << " ";
    }

    // advance()를 사용하여 이터레이터를 2만큼 전진
    auto it = std::begin(numbers);
    std::advance(it, 2);
    std::cout << "\nElement at index 2: " << *it << std::endl;

    // next()를 사용하여 현재 이터레이터에서 3만큼 이동한 위치의 요소 출력
    auto nextIt = std::next(it, 3);
    std::cout << "Element at index 5: " << *nextIt << std::endl;

    // prev()를 사용하여 현재 이터레이터에서 1만큼 이전 위치의 요소 출력
    auto prevIt = std::prev(nextIt);
    std::cout << "Element at index 4: " << *prevIt << std::endl;

    return 0;
}

프로그램언어 C++에서의 STL에서의 펑터와 람다 함수들

프로그램언어 C++에서의 STL(Standard Template Library)에서 펑터와 람다 함수는 함수 객체를 만들어 사용하는 방법으로, 유연하고 강력한 기능을 제공합니다.

**펑터(Functor)**는 함수처럼 동작하는 객체로, 함수 호출 연산자(operator())를 오버로딩하여 사용됩니다. 펑터는 주로 알고리즘 함수들과 함께 사용되어 특정 동작을 수행하거나 조건을 검사하는 데 활용됩니다.

**람다 함수**는 익명 함수로, 한 번 사용하거나 간단한 기능을 수행할 때 유용합니다. 람다 함수는 [] 기호를 사용하여 캡처 블록을 정의하고, () 내부에 매개변수를 정의하며 {} 내부에 함수 본문을 작성합니다.

아래는 간단한 예제 코드를 통해 펑터와 람다 함수의 활용을 보여줍니다.


#include 
#include 
#include 

// 펑터 예제
struct IsOdd {
    bool operator()(int num) const {
        return num % 2 != 0;
    }
};

int main() {
    std::vector numbers = {1, 2, 3, 4, 5};

    // 펑터를 사용하여 홀수인지 판별
    auto oddCount = std::count_if(numbers.begin(), numbers.end(), IsOdd());
    std::cout << "홀수의 개수: " << oddCount << std::endl;

    // 람다 함수 예제
    int threshold = 3;
    // 람다 함수를 사용하여 threshold보다 큰 수를 출력
    std::for_each(numbers.begin(), numbers.end(), [threshold](int num) {
        if (num > threshold) {
            std::cout << num << " ";
        }
    });
    std::cout << std::endl;

    return 0;
}

프로그램언어 C++에서의 STL의 메모리 할당 관련 클래스 및 함수들

STL(Standard Template Library)은 C++ 프로그래밍에서 자주 사용되는 라이브러리이며, 메모리 할당과 관련된 클래스 및 함수들이 포함되어 있습니다.

STL에서 메모리 할당을 다루는 중요한 클래스는 std::allocator입니다. 이 클래스는 메모리를 동적으로 할당하고 해제하는데 사용됩니다. 또한, std::allocator_traits 클래스는 std::allocator를 래핑하여 특정 타입의 메모리 할당을 관리하는 데 도움을 줍니다.

STL에서 메모리 할당과 해제를 위한 함수로는 std::allocate_shared, std::allocate_unique, std::allocator::allocate, std::allocator::deallocate 등이 있습니다. 이러한 함수들을 사용하여 메모리를 효율적으로 관리할 수 있습니다.

아래는 std::allocator를 사용하여 동적으로 메모리를 할당하고 해제하는 예제 코드입니다.


#include <iostream>
#include <memory>

int main() {
    // std::allocator를 사용하여 int 타입의 메모리를 할당
    std::allocator<int> alloc;
    int* ptr = alloc.allocate(1);

    // 할당된 메모리에 값 설정
    *ptr = 42;
    std::cout << "Allocated value: " << *ptr << std::endl;

    // 메모리 해제
    alloc.deallocate(ptr, 1);

    return 0;
}

Leave a Comment