IMCAT.DEV
로그인 가입
C++ 고급 자료구조

C++ 고급 STL 사용법

C++ 고급 STL 사용법 — 고급

고급 STL 사용법

1. 도입 (왜 배워야 하는가)

C++의 표준 템플릿 라이브러리(STL)는 데이터 구조와 알고리즘의 강력한 도구 모음을 제공합니다. 실무에서 STL을 잘 활용하면 코드의 재사용성, 가독성, 유지보수성을 크게 향상시킬 수 있습니다. 예를 들어, 복잡한 데이터 처리나 검색 기능을 구현할 때 STL의 컨테이너와 알고리즘을 사용하면 개발 시간이 단축되고 버그 발생 가능성이 줄어듭니다.

반면, STL을 모르면 기본적인 데이터 구조를 스스로 구현해야 하며, 이로 인해 코드의 복잡성이 증가하고, 성능 최적화에도 한계가 생길 수 있습니다. 결과적으로 생산성이 낮아지고, 유지보수가 힘든 코드가 생성될 수 있습니다.

2. 핵심 개념 설명

STL의 주요 구성 요소는 컨테이너, 알고리즘, 이터레이터입니다.

용어설명
컨테이너데이터를 저장하는 구조 (예: 벡터, 리스트, 맵 등)
알고리즘데이터를 처리하는 함수 (예: 정렬, 검색 등)
이터레이터컨테이너 요소에 접근하는 방법

실생활 비유로, 컨테이너는 상자, 알고리즘은 상자 안의 물건을 정리하는 방법, 이터레이터는 상자를 열고 물건을 꺼내는 도구라고 할 수 있습니다.

3. 기본 코드 예제

여기서는 std::vector와 std::sort를 사용하여 정수 배열을 정렬하는 기본적인 예제를 보여줍니다.

#include <iostream>
#include <vector>
#include <algorithm> // std::sort 필요

int main() {
    std::vector<int> numbers = {5, 2, 8, 1, 4}; // 정수 벡터 선언 및 초기화
    std::sort(numbers.begin(), numbers.end()); // 벡터를 정렬

    for (int n : numbers) { // 정렬된 벡터의 요소 출력
        std::cout << n << " "; // 각 요소를 출력
    }
    return 0;
}

실행 결과:

1 2 4 5 8

동작 설명:

  1. #include <iostream>: 입출력 스트림을 포함합니다.
  2. #include <vector>: 벡터를 사용하기 위한 헤더를 포함합니다.
  3. #include <algorithm>: 정렬 알고리즘을 포함합니다.
  4. std::vector<int> numbers = {5, 2, 8, 1, 4};: 정수형 벡터를 선언하고 초기화합니다.
  5. std::sort(numbers.begin(), numbers.end());: 벡터의 시작과 끝을 지정하여 정렬합니다.
  6. for (int n : numbers) { std::cout << n << " "; }: 정렬된 숫자를 출력합니다.
  7. 4. 실전 활용 예제

    예제 1: 쇼핑몰 장바구니 구현

    쇼핑몰에서 장바구니에 상품을 추가하고 가격을 계산하는 기능을 구현할 때, std::vector와 std::accumulate를 사용할 수 있습니다.

    #include <iostream>
    #include <vector>
    #include <numeric> // std::accumulate 필요
    
    int main() {
        std::vector<double> cart = {19.99, 5.49, 3.99}; // 장바구니에 담긴 상품 가격
        double total = std::accumulate(cart.begin(), cart.end(), 0.0); // 총 가격 계산
    
        std::cout << "총 가격: " << total << "원" << std::endl; // 총 가격 출력
        return 0;
    }

    실행 결과:

    총 가격: 29.47원

    예제 2: 사용자 입력으로 리스트 구성

    사용자가 입력한 숫자를 벡터에 추가하고 정렬하는 예제입니다.

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main() {
        std::vector<int> numbers;
        int input;
    
        std::cout << "정수를 입력하세요 (0 입력 시 종료): ";
        while (std::cin >> input && input != 0) {
            numbers.push_back(input); // 입력된 정수를 벡터에 추가
        }
    
        std::sort(numbers.begin(), numbers.end()); // 정렬
        std::cout << "정렬된 숫자들: ";
        for (int n : numbers) {
            std::cout << n << " "; // 정렬된 숫자 출력
        }
        return 0;
    }

    실행 결과:

    정수를 입력하세요 (0 입력 시 종료): 7 3 2 9 0
    정렬된 숫자들: 2 3 7 9

    5. 흔한 실수와 주의사항

    실수 1: 벡터의 크기 초과 접근

    std::vector<int> vec = {1, 2, 3};
    std::cout << vec[3]; // 벡터의 크기를 초과하여 접근 (틀린 코드)

    올바른 코드:

    if (index < vec.size()) {
        std::cout << vec[index]; // 안전한 접근
    }

    실수 2: 잘못된 정렬 기준

    std::sort(numbers.begin(), numbers.end(), std::greater<int>());

    정렬 기준을 잘못 설정하면 예상과 다른 결과를 초래할 수 있습니다. 항상 정렬 기준을 명확히 하세요.

    6. 정리

    • STL은 C++에서 데이터 구조와 알고리즘을 쉽게 사용할 수 있게 해줍니다.
    • 컨테이너, 알고리즘, 이터레이터의 개념을 이해해야 합니다.
    • 실무에서 벡터, 리스트, 맵 등을 활용하여 작업을 간소화 할 수 있습니다.
    • 다음 주제로는 std::map과 std::set의 활용법을 추천합니다.