C++ Standard Library와 STL 완전 정리

gigyesik·2025년 6월 25일

developer-roadmap-c++

목록 보기
12/20

C++ Standard Library와 STL 완전 정리

C++을 본격적으로 다루기 시작하면 반드시 마주하게 되는 것이 STL(Standard Template Library)이다. STL은 자주 쓰이는 자료구조와 알고리즘, 반복자(iterator) 등을 표준 라이브러리 형태로 제공한다. 직접 구현하지 않고도 효율적인 코드를 작성할 수 있기 때문에, STL을 잘 활용하는 것이 곧 C++을 잘 쓰는 길이다.

이번 글에서는 C++ 표준 라이브러리(STL)의 핵심 요소들을 모두 정리해본다.


📦 STL이란?

STL은 크게 3가지 요소로 구성된다.
1. 컨테이너 (Containers): 데이터를 담는 자료구조
2. 알고리즘 (Algorithms): 정렬, 탐색, 수정 등 다양한 작업 함수
3. 반복자 (Iterators): 컨테이너를 순회하며 접근하기 위한 포인터 개념


🧱 컨테이너 (Containers)

✅ 시퀀스 컨테이너

  • vector: 동적 배열
  • list: 이중 연결 리스트
  • deque: 양쪽에서 삽입/삭제 가능
std::vector<int> vec = {1, 2, 3};
vec.push_back(4);

✅ 연관 컨테이너

  • set: 고유한 값 저장, 자동 정렬
  • map: 키-값 쌍 저장, 자동 정렬
std::map<std::string, int> m;
m["apple"] = 3;

✅ 비순서 연관 컨테이너

  • unordered_set, unordered_map: 해시 기반, 정렬되지 않지만 평균 성능 우수
std::unordered_map<std::string, int> um;
um["banana"] = 2;

✅ 컨테이너 어댑터

  • stack, queue, priority_queue
std::stack<int> s;
s.push(10);

⚙️ 알고리즘 (Algorithms)

<algorithm> 헤더를 통해 다양한 알고리즘을 바로 사용할 수 있다.

정렬

std::sort(vec.begin(), vec.end());

탐색

auto it = std::find(vec.begin(), vec.end(), 5);

수정

vec.erase(std::remove(vec.begin(), vec.end(), 6), vec.end());

🔁 반복자 (Iterators)

컨테이너의 요소를 순회할 때 반복자를 사용한다. 대표적으로 begin()end()가 있다.

for (auto it = vec.begin(); it != vec.end(); ++it) {
    std::cout << *it << " ";
}

반복자 종류

  • 입력 / 출력 반복자
  • 전방 / 양방향 / 임의 접근 반복자
  • 역방향 반복자 (rbegin(), rend())

💬 iostream 입출력

#include <iostream>

int main() {
    int a;
    std::cout << "숫자 입력: ";
    std::cin >> a;
    std::cout << "입력한 숫자: " << a << '\n';
}
  • cin, cout: 표준 입력/출력
  • cerr, clog: 에러 로그, 일반 로그

⏱️ chrono 시간 처리

auto now = std::chrono::system_clock::now();
std::time_t t = std::chrono::system_clock::to_time_t(now);
std::cout << std::ctime(&t);
  • duration: 시간 간격 표현
  • time_point: 특정 시간
  • clock: 현재 시간 측정 (system_clock, steady_clock 등)

🧵 멀티스레딩

#include <thread>

void task() {
    std::cout << "스레드 실행\n";
}

int main() {
    std::thread t(task);
    t.join();
}
  • std::thread: 새로운 스레드 실행
  • std::mutex: 동기화 도구
  • lock_guard, unique_lock: 뮤텍스 자동 잠금/해제

📚 컨테이너 예시 정리

vector

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

list

std::list<int> lst = {1, 2, 3};
lst.push_front(0);

map

std::map<std::string, int> m;
m["key"] = 100;

unordered_map

std::unordered_map<std::string, int> um;
um["id"] = 200;

✅ 마무리

STL은 C++의 가장 강력한 기능 중 하나다. 데이터를 저장하고 조작하는 컨테이너부터, 자주 쓰이는 알고리즘, 그리고 이를 유연하게 연결해주는 반복자까지.

처음엔 외워야 할 게 많고 생소할 수 있지만, 직접 코드를 짜고 활용해보면 손에 익기 시작한다. STL을 잘 익혀두면 실무에서도 훨씬 빠르고 깔끔한 C++ 코드를 작성할 수 있다.

profile
Server Dev

0개의 댓글