[C++] STL

Hyuna·2025년 4월 18일

C++ 기본

목록 보기
18/18
post-thumbnail


STL = Standard Template Library

C++에 기본으로 포함된 자료구조 + 알고리즘을 모아놓은 라이브러리이다.


STL에 들어 있는 도구는 3종

  • 컨테이너 vector, map, set
    데이터를 담는 그릇

  • 알고리즘 sort, find, max_element
    데이터를 정렬하거나 찾는 함수들

  • 이터레이터 begin(), end()
    컨테이너 안에서 데이터를 순회하게 해주는 요소



#include <iostream>

// 표준 입출력
cin                        // 입력
cout                       // 출력
getline(cin, str);         // 한 줄 전체 입력
ios::sync_with_stdio(false); // C, C++ 입출력 동기화 해제 (속도 향상)
cin.tie(0);                // cin과 cout의 묶음 해제 (속도 향상)

#include <vector>

 // 동적 배열
v.push_back(x);            // 벡터에 원소 추가
v.size();                  // 벡터 크기 반환
v.clear();                 // 벡터 비우기
vector<vector<int>> v(n, vector<int>(m)); // 2차원 벡터 초기화

#include <tuple>

// 튜플
make_tuple(a,b,c);         // 튜플 생성
tie(a,b,c) = my_tuple;     // 튜플을 변수에 분해
get<0>(my_tuple);          // 튜플의 첫 번째 요소 접근

#include <set>

// 자동 정렬 + 중복 제거 집합
s.insert(x);               // 원소 삽입
s.erase(x);                // 원소 삭제
s.count(x);                // 원소 존재 여부 (0 또는 1)
auto it = s.find(x);       // 원소 찾기 (없으면 s.end() 반환)

#include <map>

// key → value 형태의 자료구조
m[key] = value;            // 값 삽입 또는 갱신
m.find(key);               // 키 위치 찾기 (iterator 반환)
m.count(key);              // 키 존재 여부 (0 또는 1)

#include <string>

// 문자열
s.length(), s.size();      // 문자열 길이
s.substr(start, len);      // 부분 문자열 추출
s.find("abc");             // 부분 문자열 위치 찾기
s.replace(pos, len, "new"); // 문자열 일부 교체
stoi("123");               // 문자열 → 정수 변환
to_string(123);            // 정수 → 문자열 변환

#include <algorithm>

// 정렬, 최대/최소값 등
sort(v.begin(), v.end());                        // 오름차순 정렬
sort(v.begin(), v.end(), greater<int>());        // 내림차순 정렬
reverse(v.begin(), v.end());                     // 벡터 뒤집기
max_element(v.begin(), v.end());                 // 최대값 위치
min_element(v.begin(), v.end());                 // 최소값 위치
next_permutation(v.begin(), v.end());            // 사전순으로 다음 순열로 변경
lower_bound(v.begin(), v.end(), x);              // x 이상 처음 위치의 인덱스 번호
upper_bound(v.begin(), v.end(), x);              // x 초과 첫 위치의 인덱스 번호 

#include <iomanip>

I/O Manipulator → 입출력 조작

  • io : input/output
  • manip : manipulator
// 출력 포맷 조절
cout << fixed << setprecision(2); // 소수점 아래 2자리까지 고정 출력

#include <functional>

// 비교 함수 객체
greater<>()            // 내림차순 정렬 or 우선순위 큐에서 사용

#include <cctype>

// 문자 처리
toupper(c);              // 소문자 → 대문자
tolower(c);              // 대문자 → 소문자
isdigit(c);              // 숫자인지 확인 (0~9)

#include <queue>

// 큐
queue<int> q; q.push(x); // 큐 삽입
q.pop();                 // 큐 제거
q.front();               // 큐 맨 앞 원소 반환
priority_queue<int> pq;  // 최대 힙 (큰 값이 먼저 나옴)
priority_queue<int, vector<int>, greater<int>> pq; // 최소 힙

#include <cstring>

// 메모리 처리
memset(arr, 0, sizeof(arr)); // 배열 0으로 초기화

#include <climits>

// 정수형 타입의 최대, 최소 상수들
INT_MAX, INT_MIN;  // int 자료형 최대/최소
LONG_MAX, LLONG_MIN; // long/long long 최대/최소

#include <cmath>

// 수학 함수
abs(x);                  // 절댓값
sqrt(x);                 // 제곱근

#include <utility>

// 두 개의 값을 하나로 묶어서 쓸 때 
pair<x,y>; // 두 값을 하나로 
swap(x,y); // 두 값을 교환

#include <unordered_map>

// 해시 기반 맵 (정렬 X, 빠른 접근)
for (auto& [k,v] : umap) // 해시맵 전체 순회 (구조 분해 방식)

0개의 댓글