cpp

C++ STL(Standard Template Library)

임베디드 친구 2024. 12. 20. 20:09
반응형

C++의 STL(Standard Template Library)은 프로그래머에게 효율적이고 유연한 데이터 구조와 알고리즘을 제공합니다. STL은 다음과 같은 세 가지 주요 구성 요소로 나뉩니다:

  • 컨테이너(Container): 데이터를 저장하는 객체들
  • 반복자(Iterator): 컨테이너의 요소를 순회하기 위한 도구
  • 알고리즘(Algorithm): 정렬, 탐색 등 데이터 처리 기능 제공

이번 포스팅에서는 STL의 주요 구성 요소와 활용법을 예제와 함께 소개하겠습니다.


STL의 주요 구성 요소

1. 컨테이너(Container)

컨테이너는 데이터를 저장하는 객체입니다. 크게 시퀀스 컨테이너, 연관 컨테이너, 그리고 어댑터 컨테이너로 나눌 수 있습니다.

시퀀스 컨테이너

  • vector: 동적 배열
  • deque: 양방향 큐
  • list: 이중 연결 리스트

연관 컨테이너

  • set / multiset: 정렬된 고유 키 저장
  • map / multimap: 키-값 쌍 저장
  • unordered_set / unordered_map: 해시 기반 컨테이너

어댑터 컨테이너

  • stack: 후입선출(LIFO)
  • queue: 선입선출(FIFO)
  • priority_queue: 우선순위 큐

2. 반복자(Iterator)

반복자는 컨테이너 요소를 탐색하고 조작할 수 있게 해줍니다. 주요 반복자 유형은 다음과 같습니다:

  • 입력 반복자
  • 출력 반복자
  • 순방향 반복자
  • 양방향 반복자
  • 임의 접근 반복자

3. 알고리즘(Algorithm)

STL은 정렬, 탐색, 변경 등 다양한 알고리즘을 제공합니다. 예:

  • std::sort: 정렬
  • std::find: 특정 요소 탐색
  • std::for_each: 요소에 함수 적용

STL 컨테이너와 예제

1. vector 사용 예제

vector는 크기를 동적으로 조절할 수 있는 배열입니다.

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

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

    // 요소 추가
    numbers.push_back(6);

    // 요소 출력
    std::cout << "Vector elements: ";
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 요소 정렬
    std::sort(numbers.begin(), numbers.end(), std::greater<int>());
    std::cout << "Sorted elements in descending order: ";
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

2. map 사용 예제

map은 키-값 쌍을 저장하며 키를 기준으로 정렬합니다.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> studentScores;

    // 키-값 추가
    studentScores["Alice"] = 90;
    studentScores["Bob"] = 85;
    studentScores["Charlie"] = 88;

    // 모든 요소 출력
    for (const auto& pair : studentScores) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }

    // 특정 키 탐색
    std::string name = "Bob";
    if (studentScores.find(name) != studentScores.end()) {
        std::cout << name << "'s score: " << studentScores[name] << std::endl;
    } else {
        std::cout << name << " not found." << std::endl;
    }

    return 0;
}

3. set 사용 예제

set은 중복되지 않은 정렬된 데이터를 저장합니다.

#include <iostream>
#include <set>

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

    // 요소 출력
    std::cout << "Set elements: ";
    for (int num : uniqueNumbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 요소 추가
    uniqueNumbers.insert(6);

    // 요소 삭제
    uniqueNumbers.erase(3);

    std::cout << "Updated set elements: ";
    for (int num : uniqueNumbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

STL 알고리즘과 예제

1. sort 알고리즘 예제

std::sort는 컨테이너의 요소를 정렬합니다.

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

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

    // 오름차순 정렬
    std::sort(numbers.begin(), numbers.end());
    std::cout << "Sorted in ascending order: ";
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

2. for_each 알고리즘 예제

std::for_each는 컨테이너의 각 요소에 함수를 적용합니다.

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

void printSquare(int n) {
    std::cout << n * n << " ";
}

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

    std::cout << "Squares of elements: ";
    std::for_each(numbers.begin(), numbers.end(), printSquare);
    std::cout << std::endl;

    return 0;
}

결론

이번 포스팅에서는 C++ STL의 주요 구성 요소인 컨테이너, 반복자, 알고리즘을 살펴보았습니다. STL은 코드의 생산성을 높이고 복잡한 데이터 구조와 알고리즘 구현을 간소화하는 강력한 도구입니다. 제공된 예제를 직접 실행해보고 다양한 STL 기능을 탐구해 보세요.

앞으로도 유용한 C++ 개발 정보를 제공하겠습니다. 다음 포스팅도 기대해주세요!

반응형