나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2024-04-10 19:56:52

C++/표준 라이브러리

파일:관련 문서 아이콘.svg   관련 문서: 라이브러리
,
,
,
,
,

파일:상위 문서 아이콘.svg   상위 문서: C++
1. 개요
1.1. 역사
2. 구성
2.1. 환경
2.1.1. <cstddef>2.1.2. <cstdlib>2.1.3. <version>2.1.4. <debugging>2.1.5. <text_encoding>
2.2. 메타 프로그래밍
2.2.1. <type_traits>2.2.2. <concepts>
2.3. 리플렉션
2.3.1. <typeinfo>2.3.2. <typeindex>2.3.3. <source_location>2.3.4. <stacktrace>
2.4. 오류 처리
2.4.1. <exception>2.4.2. <stdexcept>2.4.3. <system_error>2.4.4. <expected>
2.5. 숫자
2.5.1. 연산
2.5.1.1. <cmath>2.5.1.2. <complex>2.5.1.3. <bit>2.5.1.4. <linalg>
2.5.2. 메타
2.5.2.1. <limits>2.5.2.2. <numbers>
2.6. 문자열
2.6.1. <string>2.6.2. <regex>2.6.3. <string_view>2.6.4. <charconv>2.6.5. <format>
2.7. 컨테이너
2.7.1. <vector>2.7.2. <bitset>2.7.3. <deque>2.7.4. <list>2.7.5. <set>2.7.6. <map>2.7.7. <array>2.7.8. <forward_list>2.7.9. <unordered_set>2.7.10. <unordered_map>2.7.11. 컨테이너 어댑터
2.7.11.1. <stack>2.7.11.2. <queue>2.7.11.3. <flat_set>2.7.11.4. <flat_map>
2.7.12. 순회자
2.8. 알고리즘
2.8.1. <algorithm>2.8.2. <numeric>2.8.3. <execution>
2.9. 범위
2.9.1. <span>2.9.2. <ranges>2.9.3. <mdspan>
2.10. 입/출력
2.10.1. <iostream>2.10.2. <iomanip>2.10.3. <strstream>2.10.4. <sstream>2.10.5. <fstream>2.10.6. <syncstream>2.10.7. <print>
2.11. 유틸리티
2.11.1. <utility>2.11.2. <functional>2.11.3. <initializer_list>2.11.4. <compare>2.11.5. 컨테이너
2.11.5.1. <tuple>2.11.5.2. <variant>2.11.5.3. <any>2.11.5.4. <optional>
2.11.6. <random>2.11.7. <chrono>2.11.8. <locale>2.11.9. <filesystem>
2.12. 저수준 메모리 제어
2.12.1. <new>2.12.2. <memory>2.12.3. <scoped_allocator>2.12.4. <memory_resource>
2.13. 병렬성
2.13.1. 스레드
2.13.1.1. <thread>2.13.1.2. <jthread>2.13.1.3. <stop_token>
2.13.2. 상호 배제
2.13.2.1. <mutex>2.13.2.2. <condition_variable>2.13.2.3. <shared_mutex>2.13.2.4. <barrier>2.13.2.5. <latch>
2.13.3. 메모리
2.13.3.1. <atomic>2.13.3.2. <rcu>2.13.3.3. <hazard_pointer>
2.13.4. 비동기 실행
2.13.4.1. <future>2.13.4.2. <coroutine>2.13.4.3. <generator>
3. 여담4. 구현체5. 외부 링크

1. 개요

C++의 기능 명세와 명세를 구현한 라이브러리에 대해 설명하는 문서.

1.1. 역사

C++의 언어 표준 명세와 이를 제정한 표준 라이브러리는 본래 표준과는 독립적이었던 STL이라는 구현체에서 유래했다 [1]. Alexander Stepanov (1979)는 일반화 프로그래밍 기법에 대한 연구를 했었다. 이 과정에서 자료형에 부여받지 않는 자료구조알고리즘을 사용하는 일반화 프로그래밍(Generic programming) 개념을 구현하기 위해 개발되었다. 이는 특정 언어와 관련있는 연구는 아니었지만 C++ (1983)에 영향을 주어 STL의 시초를 만들게 되었다. 연구의 결과물인 STL 구현체가 1993년에 C++ 표준안 제정 위원회[2]에 처음 제출되면서 C++과 인연을 맺게 되었고 Meng Lee와 David Musser가 추가로 협력하여 개선한 STL 구현체가 1994년에 C++ 표준으로 승인되었다. 특히 gcc에 내장된 구현체 libstdc++와 Clang에 내장된 구현체인 libc++에 지대한 영향을 끼쳤다. 이젠 STL은 독립적으로 존재했던 역사적 이름으로서 표준에 융화된 이후로는 특별히 구분하지는 않는다. C++ 표준 라이브러리는 기존 STL이 제공하는 것 외에도 템플릿을 사용하는 많은 것이 있기 때문이다.

현재의 C++ standard library가 Stephanov, Lee, Musser가 90년대에 개발한 Standard Template Library(STL)의 아이디어를 많이 수용한 것은 사실이나, C++ 표준안 그 어디에도 STL이라는 표현은 등장하지 않는다는 점이 주목할 만 하다. Effective C++의 저자인 Scott Meyers와 같이 나이 많은 거장 프로그래머들이 90년대의 관습 그대로 STL이라는 용어를 자신의 저작물에 지속적으로 사용하는 바람에 STL이라는 용어가 아직도 널리 사용되고 있으나, STL과 C++ standard library의 차이가 뭔지 묻는 수많은 구글 검색 결과가 보여주듯이 초보자들에게 꽤 커다란 혼돈을 주는 요소이다. STL은 여러 유명한 프로그래머의 강연이나 저자물에서 용어를 각기 다르게 사용해서 널리 오해되고 잘못 사용되는 용어이다. 예를 들면 Standard Template Library의 약자라는 설, Stephanov와 Lee가 근무하던 Software Technology Laboratory의 약자라는 설, STephanov and Lee의 약자라는 설, 등등. Stephanov와 Lee가 직접 작성한 Hewlet-Packard 버전의 최초의 STL이나, 실질적으로 더 널리 쓰이던 Silicon Graphics 버전의 SGI STL은 더 이상 관리가 되지 않고 방치가 된 지 오래이고, SGI STL을 계승하려고 노력하던 STLPort도 개발이 중단되었다.

결국 2024년 시점에서 평가하자면 초창기 STL의 구현체는 모두 사라지고 그 아이디어만이 살아남아서 C++ Standard Library에 흡수되었으므로, STL을 따로 떼어 지칭하는 것이 이제 의미가 없다고 하겠다. 물론 아직도 표준 라이브러리 전체를 STL이라고 부르거나, 표준 라이브러리의 컨테이너 부분을 STL이라고 부르는 경우도 종종 보인다.

2. 구성

===# 전체 모듈 목록 #===
|C++ 표준 라이브러리|<table width=90%><tablealign=center><tablebordercolor=#030303,#eeeeee><nopad>
||<:><width=23%>분류||<-2>이름||
환경#<cstddef>
#<cstdlib>
#<version>C++20
#<debugging>C++26
#<text_encoding>C++26
오류 처리
#<exception>
#<stdexcept>
#<system_error>C++11
#<expected>C++23
메타 프로그래밍#<type_traits>C++11
#<concepts>C++20
리플렉션#<typeinfo>
#<typeindex>C++11
#<source_location>C++20
#<stacktrace>C++23
숫자#<complex>
#<bitset>
#
#<linalg>
#<ratio>C++11
#<numbers>C++20
#<bit>C++20
숫자 메타#
#
#C++11
#C++23
#<limits>
문자열#<string>
#<regex>C++11
#<string_view>C++17
#<charconv>C++17
#<format>C++20
선형 연속 컨테이너#C++11
#<vector>
#<deque>
선형 연결 컨테이너#<list>
#<forward_list>C++11
연관 컨테이너#<set>
#<map>
#<unordered_set>C++11
#<unordered_map>C++11
컨테이너 인터페이스#<stack>
#<queue>
#<flat_set>C++23
#<flat_map>C++23
순회자#<iterator>
범위 알고리즘#<algorithm>
#<numeric>
#<execution>C++17
범위 인터페이스#<span>C++20
#<mdspan>C++23
#<ranges>C++20
#<generator>C++23
스트림#
#
#
#
#
#<iomanip>
#<iostream>
#<sstream>
#<strstream> C++98
#<syncstream>C++20
#<spanstream>C++23
IO#<iostream>
#<fstream>
#<print>C++23
유틸리티#<utility>
#<functional>
#<random>C++11
#<initializer_list>C++11
#<chrono>C++11
#<tuple>C++11
#<variant>C++17
#<any>C++17
#<optional>C++17
#<filesystem>C++17
#<compare>C++20
동적 메모리 관리#<new>
#[[C++/표준 라이브러리#]]
#<scoped_allocator>C++11
#<memory_resource>C++17
병렬 실행#<thread>C++11
#<future>C++11
#<coroutine>C++20
#<generator>C++23
동시성 제어#<mutex>C++11
#<condition_variable>C++11
#<shared_mutex>C++14
#<stop_token>C++20
#<barrier>C++20
#<latch>C++20
원자적 연산#<atomic>C++11
#<rcu>C++26
#<hazard_pointer>C++26
현지화#<locale>
#C++11 C++17
#<text_encoding>C++23
||


2.1. 환경

2.1.1. <cstddef>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>cstddef||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <stddef.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
C++ 런타임에 필요한 각종 자료형들을 정의한다.


2.1.2. <cstdlib>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>cstdlib||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <stdlib.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#


2.1.3. <version>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>version||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
라이브러리 버전과 기능 매크로를 정의하는 모듈



2.1.4. <debugging>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>debugging||
지원 버전
C++26
C++26 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
디버그 관련 도구를 제공하는 모듈.


2.1.5. <text_encoding>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>text_encoding||
지원 버전
C++26
C++26 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
현재 콘솔 환경에서 텍스트 인코딩을 확인하는 기능을 제공하는 모듈.


2.2. 메타 프로그래밍

2.2.1. <type_traits>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>type_traits||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
자료형에 대한 컴파일 시점 연산 및 기술 방법을 제공하는 모듈.



2.2.2. <concepts>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>concepts||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
제약조건 모듈.



파일:상세 내용 아이콘.svg   자세한 내용은 C++/표준 라이브러리/concepts 문서
번 문단을
부분을
참고하십시오.

2.3. 리플렉션

2.3.1. <typeinfo>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>typeinfo||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
런타임에 자료형에 대한 메타 정보를 가져올 수 있는 모듈.


2.3.2. <typeindex>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>typeinfo||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
런타임에 자료형에 대한 메타 정보를 가져올 수 있는 모듈.



C++11

2.3.3. <source_location>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>source_location||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
현재 실행되는 문맥의 정보를 확인하는 기능을 제공하는 모듈.


2.3.4. <stacktrace>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>stacktrace||
지원 버전
C++23
C++23 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
현재 실행 스택을 확인할 수 있는 인터페이스를 제공하는 모듈.


2.4. 오류 처리

2.4.1. <exception>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>exception||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
예외 구현 클래스와 예외 관련 유틸리티를 제공하는 모듈.


2.4.2. <stdexcept>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>stdexcept||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
특수한 목적을 위해 파생된 예외 클래스들을 제공하는 모듈.


2.4.3. <system_error>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>system_error||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
사용자의 운영체제에 특화된 예외 처리를 지원하는 모듈.


2.4.4. <expected>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>expected||
지원 버전
C++23
C++23 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
성공한 결과와 실패한 결과를 구분하는 기능을 제공하는 모듈.



2.5. 숫자

2.5.1. 연산

2.5.1.1. <cmath>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>cmath||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <math.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#



2.5.1.2. <complex>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>complex||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
복소수 연산 및 수학 함수의 오버로딩을 제공하는 모듈.


2.5.1.3. <bit>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>bit||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
단일 숫자의 비트를 조작하는 연산을 제공하는 모듈.


2.5.1.4. <linalg>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>linalg||
지원 버전
C++26
C++26 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
선형 대수 연산을 제공하는 모듈.



2.5.2. 메타

2.5.2.1. <limits>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>limits||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
숫자에 대한 메타 정보를 기술하고\



* class std::numeric_limits: 숫자 자료형의 최대값, 최소값 등 정보를 기술하는 메타 클래스.
2.5.2.2. <numbers>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>numbers||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
std::numbers::pi\



2.6. 문자열

2.6.1. <string>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>string||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
문자열 클래스와 문자열 변환 함수들을 제공하는 모듈.


2.6.2. <regex>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>regex||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
기능을 제공하는 모듈.



2.6.3. <string_view>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>string_view||
지원 버전
C++17
C++17 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
읽기 전용 문자열 클래스를 제공하는 모듈


2.6.4. <charconv>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>charconv||
지원 버전
C++17
C++17 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
자명한 자료형과 문자열 사이에 서로 변환하는 기능을 제공하는 모듈


2.6.5. <format>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>format||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
일정한 규칙을 가진 문자열을 통한 일련의 값들의 문자열 형식화 기능을 제공하는 모듈.



2.7. 컨테이너

어떤 자료를 저장할 수 있는 템플릿 클래스의 집합으로써 아직 때때로 STL이라고 칭해지는 명세다.

템플릿을 이용해서 일반화 프로그래밍을 잘 구현하고 있으며, 대개 어떤 자료형에든 적용할 수 있다. 구현하고자 하는 동작에서 가장 오버헤드가 걸릴 것으로 생각되는 부분을 고려하여 컨테이너를 선택하면 성능 향상에 도움이 된다. 한편 사용자 정의 클래스의 경우 std::vector<T>와 같이 정의하면 바로 사용할 수 있는 경우도 있는 반면, 자료에 대한 연산을 위해 별도의 함수를 정의해 주어야 하는 경우도 있다. 과 같이 고유한 키 값을 써서 정렬이나 연산을 하는 경우를 예로 들 수 있다. 특히 std::map, std::unordered_map 계열이 대표적이다.

2.7.1. <vector>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>vector||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
메모리의 맨 끝부분으로 삽입/삭제가 이루어지는 동적 배열 클래스 std::vector를 제공하는 모듈.


2.7.2. <bitset>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>bitset||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
std::vector를 대체하는 클래스 std::bitset를 제공하는 모듈.


2.7.3. <deque>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>deque||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
메모리의 양방향으로 삽입/삭제가 이루어지는 동적 배열 클래스 std::deque를 제공하는 모듈.


2.7.4. <list>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>list||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
양방향 연결 리스트 클래스 std::list를 제공하는 모듈.


2.7.5. <set>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>set||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
집합 클래스 std::set와 std::multiset을 제공하는 모듈.


2.7.6. <map>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>map||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
사상 클래스 std::map과 std::multimap을 제공하는 모듈.


2.7.7. <array>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>array||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
정적 배열 클래스 std::array를 제공하는 모듈.


2.7.8. <forward_list>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>forward_list||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
단방향 연결 리스트 클래스 std::forward_list를 제공하는 모듈.


2.7.9. <unordered_set>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>unordered_set||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
해시 기반의 집합 컨테이너 클래스 std::unordered_set과 std::unordered_multiste을 제공하는 모듈


2.7.10. <unordered_map>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>unordered_map||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
해시 기반의 연관 컨테이너 클래스 std::unordered_map과 std::unordered_multimap을 제공하는 모듈


2.7.11. 컨테이너 어댑터

2.7.11.1. <stack>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>stack||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
컨테이너 어댑터에 속하며 컨테이너는 아니다.


2.7.11.2. <queue>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>queue||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
컨테이너 어댑터에 속하며 컨테이너는 아니다.


2.7.11.3. <flat_set>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>flat_set||
지원 버전
C++23
C++23 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
컨테이너 어댑터에 속하며 컨테이너는 아니다.


2.7.11.4. <flat_map>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>flat_map||
지원 버전
C++23
C++23 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
컨테이너 어댑터에 속하며 컨테이너는 아니다.


2.7.12. 순회자

컨테이너의 원소를 순회하는 방법을 추상화한 명세.

2.8. 알고리즘

2.8.1. <algorithm>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>algorithm||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
자료구조의 반복자를 통해 범위 기반의 알고리즘을 실행하는 템플릿 함수들을 제공하는 모듈.


C++11이 나오면서 많은 변화를 겪었는데, 많은 함수들에 우측값 참조를 사용할 수 있게 되면서 불필요한 복사를 줄일 수 있다. 또한 익명 함수를 지원하면서 프로그래밍이 깔끔해졌다. std::for_each() 같은 것을 예로 들 수 있다.

2.8.2. <numeric>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>numeric||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
자료구조의 반복자를 통해 숫자와 관련된 알고리즘을 실행하는 템플릿 함수들을 제공하는 모듈.



2.8.3. <execution>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>execution||
지원 버전
C++17
C++17 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#


C++17에서는 드디어 알고리즘들이 병렬 실행을 지원하기로 하였다. 알고리즘 호출 시에 std::execution::sequenced_policy, std::execution::parallel_policy, std::execution::parallel_unsequenced_policy를 선택할 수 있다. 2019년 6월 현재 GCC 9와 MSVC 2017, Intel C++ 컴파일러가 이를 지원한다. LLVM/Clang의 경우 아직 지원하지 않는다.

2.9. 범위

2.9.1. <span>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>span||
지원 버전
C++17
C++17 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#


2.9.2. <ranges>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>ranges||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
기존 컨테이너 또는 범위에 대해 엄밀하고 일반화된 알고리즘을 지원하고\



2.9.3. <mdspan>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>mdspan||
지원 버전
C++23
C++23 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#


2.10. 입/출력

2.10.1. <iostream>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>iostream||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
스트림 방식의 문자열 입출력 기능을 제공하는 모듈.



2.10.2. <iomanip>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>iomanip||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
스트림 입출력 도우미 모듈.



2.10.3. <strstream>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>strstream||
지원 버전
C++98
C++98 ~ C++23
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
문자열 스트림 모듈.



2.10.4. <sstream>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>sstream||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
문자열 스트림 모듈.



2.10.5. <fstream>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>fstream||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
파일 스트림 모듈.



2.10.6. <syncstream>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>syncstream||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
동기식 스트림.



2.10.7. <print>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>print||
지원 버전
C++23
C++23 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
C언어의 표준 입출력 또는 C++ 스트림으로의 문자열을 출력하는 기능을 제공하는 모듈


2.11. 유틸리티

2.11.1. <utility>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>utility||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#



C++11 이전까지는 오로지 std::pair만 들어있어서 이름을 <pair>로 바꿔도 될 수준이었다. 지금은 std::tuple, 인덱스와 자료형 메타 매개변수를 위한 std::in_place_type_t, std::in_place_t, std::integer_sequence같은 정적인 유틸리티를 제공한다.

2.11.2. <functional>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>functional||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#



2.11.3. <initializer_list>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>initializer_list||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#



2.11.4. <compare>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>compare||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
새로운 객체를 비교하는 방법을 제공하는 모듈.


2.11.5. 컨테이너

2.11.5.1. <tuple>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>tuple||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#


2.11.5.2. <variant>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>variant||
지원 버전
C++17
C++17 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#


2.11.5.3. <any>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>any||
지원 버전
C++17
C++17 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#


2.11.5.4. <optional>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>optional||
지원 버전
C++17
C++17 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#


2.11.6. <random>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>random||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
난수 생성\



C++11

2.11.7. <chrono>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>chrono||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
시간\



2.11.8. <locale>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>locale||
지원 버전
C++11
C++11 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
화폐 단위나 숫자 단위 같은 현지화 관련 도구를 제공하는 모듈.



2.11.9. <filesystem>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>filesystem||
지원 버전
C++17
C++17 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
운영체제의 파일 시스템에 접근하는 인터페이스를 제공하는 모듈



2.12. 저수준 메모리 제어

2.12.1. <new>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>new||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
new\



2.12.2. <memory>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>memory||
지원 버전
C++98
C++98 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
스마트 포인터를 비롯한 메모리 할당 및 범용적인 메모리 제어와 관련된 연산을 제공하는 모듈.



2.12.3. <scoped_allocator>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>scoped_allocator||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
어떤 클래스가 다수의 자료구조를 멤버로 가지고 있을 때 사용할 수 있는 복합적인 메모리 할당자를 구현할 수 있도록 도와주는 모듈.



2.12.4. <memory_resource>

||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>memory_resource||
지원 버전
C++17
C++17 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
virtual 등 다형성을 이용해서 메모리 할당자를 구현할 수 있도록 도와주는 모듈



2.13. 병렬성

2.13.1. 스레드

2.13.1.1. <thread>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>thread||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
스레드를 동적으로 생성하거나 현재 스레드를 관리하는 기능을 제공하는 모듈



2.13.1.2. <jthread>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>jthread||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
기존의 스레드 클래스 std::thread의 단점을 보완하면서 원격 정지 기능도 추가한 모듈.



2.13.1.3. <stop_token>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>stop_token||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
std::jthread의 실행 제어를 위한 도구들을 제공하는 모듈. 다른 언어에서 찾아볼 수 있는 Cancellation* 류의 클래스다.


2.13.2. 상호 배제

2.13.2.1. <mutex>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>mutex||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
상호배제 전략을 이용한 잠금 기능을 제공하는 모듈.


2.13.2.2. <condition_variable>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>condition_variable||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
다수의 스레드 사이에서 잠금을 기반으로 스레드의 실행 순서를 제어하는 기능을 제공하는 모듈.


2.13.2.3. <shared_mutex>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>shared_mutex||
지원 버전
C++14
C++14 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
좀 더 유연한 상호배제 전략을 이용한 잠금 기능을 제공하는 모듈.


2.13.2.4. <barrier>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>barrier||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#


2.13.2.5. <latch>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>latch||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#


2.13.3. 메모리

2.13.3.1. <atomic>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>atomic||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
자명한 자료형에 대하여 원자적 연산을 제공하는 모듈. 자명하지 않은 자료형은 포인터를 사용해야 한다.


2.13.3.2. <rcu>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>rcu||
지원 버전
C++26
C++26 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#



2.13.3.3. <hazard_pointer>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>hazard_pointer||
지원 버전
C++26
C++26 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#



2.13.4. 비동기 실행

2.13.4.1. <future>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>future||
지원 버전
C++11
C++ ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#



2.13.4.2. <coroutine>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>coroutine||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#



2.13.4.3. <generator>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>generator||
지원 버전
C++23
C++23 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.
#
코루틴을 이용해서 알고리즘을 비동기적으로 실행하도록 도와주는 모듈



3. 여담

표준 라이브러리는 단순히 API 명세만 정해졌기에 구현체에 따라 성능이 천차만별이다. 이는 예외 처리나 플랫폼 이식성, 호환성, 범용성, 완성도 같은 문제 때문이다. 가령 게임 업계에서는 예외 기능을 거의 쓰지 않으며 성능을 극한까지 끌어내야 고품질, 대량의 처리가 가능해지므로 직접 구현해서 쓰는 경우가 적지 않다. 게임 엔진을 사서 쓰지 않고 자체 엔진이 있다면 90%는 재구현한다. 특히 C++ 소스코드를 지원하는 게임 엔진들은 std::vectorstd::list 등의 기본적인 템플릿 자료형부터 따로 지원되는 경우가 많다.

Boost에서 넘어온 라이브러리들이 상당히 많다. 애초에 부스트의 개발진들이 표준 위원회에 많이 속해있으며, 사실상 부스트가 표준으로 넘어오기 전에 사용되는 테스트베드라고 봐도 좋을 정도이다.

4. 구현체

성능은 구현체마다 천차만별이었으나 C++11의 move semantics가 등장한 이후에 상향 평준화되는 추세다. API만 동일하면 되므로 자기 자신만의 구현체를 만들어 볼 수도 있고 다른 구현체와 성능을 비교해보면 재미있을 것이다. 구현체의 종류는 대략 아래와 같은 것들이 있다.

이 외에도 다양한 구현이 있다. GCCVisual Studio가 과거에는 특정 구현체를 기반으로 만들어졌지만 독립적으로 개발하면서 지금은 전혀 다른 구현체라고 해도 무방하다.

5. 외부 링크



[1] STL은 Standard Template Library의 약자다. STL을 STandard Library의 약어로 오해하는 사람이 많지만, T는 템플릿을 의미한다.[2] 이 위원회의 결과물이 C++98 표준이다.[3] 가상 클래스는 오버헤드가 있으므로 주의해야 한다. dynamic_cast처럼 상속 테이블을 죄다 뒤져보기 때문이다.[4] 여담으로 템플릿이지만 오직 할당자만 템플릿 인자로 받고 있다. 즉 std::basic_stacktrace는 할당자로 생성된 객체가 std::stacktrace_entry를 구현하기만 하면 괜찮다는 의미다.