STL (Standard Template Library)

2025. 3. 28. 08:54Programming Languages/C++

STL (Standard Template Library)

STL(Standard Template Library)은 C++ 표준 라이브러리의 핵심 부분으로, 템플릿 기반의 컨테이너, 반복자, 알고리즘을 제공합니다. STL을 사용하면 효율적인 데이터 구조와 알고리즘을 직접 구현할 필요 없이 바로 사용할 수 있어 프로그래밍 생산성이 크게 향상됩니다.

8.1 STL 개요

8.1.1 STL의 구성 요소

STL은 크게 세 가지 주요 구성 요소로 이루어져 있습니다:

  1. 컨테이너(Containers): 데이터를 저장하고 관리하는 객체
  2. 반복자(Iterators): 컨테이너의 요소에 접근하고 순회하는 메커니즘
  3. 알고리즘(Algorithms): 데이터를 처리하는 함수들

이 외에도 다음과 같은 구성 요소가 있습니다:

  • 함수 객체(Functors): 함수처럼 동작하는 객체
  • 어댑터(Adapters): 인터페이스를 수정하는 구성 요소
  • 할당자(Allocators): 메모리 할당 및 해제를 처리하는 객체

8.1.2 STL 헤더 파일

STL을 사용하기 위한 주요 헤더 파일들:

// 컨테이너 관련 헤더
#include <vector>       // 벡터
#include <list>         // 이중 연결 리스트
#include <deque>        // 덱(양방향 큐)
#include <queue>        // 큐, 우선순위 큐
#include <stack>        // 스택
#include <set>          // 집합, 다중 집합
#include <map>          // 맵, 다중 맵
#include <unordered_set>  // 해시 집합 (C++11)
#include <unordered_map>  // 해시 맵 (C++11)
#include <array>        // 고정 크기 배열 (C++11)

// 알고리즘 관련 헤더
#include <algorithm>    // 정렬, 검색 등 알고리즘
#include <numeric>      // 수치 연산 알고리즘

// 반복자 관련 헤더
#include <iterator>     // 반복자 도구

// 유틸리티 헤더
#include <functional>   // 함수 객체와 함수 포인터
#include <utility>      // pair, swap 등

8.1.3 네임스페이스(Namespace)

STL의 모든 구성 요소는 std 네임스페이스 안에 정의되어 있습니다:

#include <vector>
#include <iostream>

int main() {
    // std 네임스페이스 사용
    std::vector<int> numbers = {1, 2, 3, 4, 5};
    std::cout << "벡터 크기: " << numbers.size() << std::endl;
    
    // using 지시문 (간단한 프로그램에서는 편리하지만 대규모 프로젝트에서는 피해야 함)
    using namespace std;
    vector<string> names = {"Alice", "Bob", "Charlie"};
    cout << "첫 번째 이름: " << names[0] << endl;
    
    // 특정 요소만 using 선언 (더 안전한 방법)
    using std::vector;
    using std::cout;
    using std::endl;
    vector<double> values = {1.1, 2.2, 3.3};
    cout << "마지막 값: " << values.back() << endl;
    
    return 0;
}

 

'Programming Languages > C++' 카테고리의 다른 글

STL 반복자  (0) 2025.03.28
STL 컨테이너  (0) 2025.03.28
챕터7. 실습 문제  (0) 2025.03.28
템플릿 메타프로그래밍  (0) 2025.03.28
가변 템플릿(Variadic Templates) (C++11)  (0) 2025.03.28