최근 수정 시각 : 2024-11-03 15:55:39

C++/표준 라이브러리

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

파일:상위 문서 아이콘.svg   상위 문서: C++
1. 개요
1.1. Standard Library와 STL
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.8. 컨테이너 어댑터
2.8.1. <stack>2.8.2. <queue>2.8.3. <flat_set>2.8.4. <flat_map>
2.9. 순회자
2.9.1. <iterator>
2.10. 알고리즘
2.10.1. <algorithm>2.10.2. <numeric>2.10.3. <execution>
2.11. 범위
2.11.1. <span>2.11.2. <ranges>2.11.3. <mdspan>
2.12. 입/출력
2.12.1. <iostream>2.12.2. <iomanip>2.12.3. <strstream>2.12.4. <sstream>2.12.5. <fstream>2.12.6. <syncstream>2.12.7. <print>
2.13. 유틸리티
2.13.1. <utility>2.13.2. <functional>2.13.3. <initializer_list>2.13.4. <compare>2.13.5. 컨테이너
2.13.5.1. <tuple>2.13.5.2. <variant>2.13.5.3. <any>2.13.5.4. <optional>
2.13.6. <random>2.13.7. <chrono>2.13.8. <locale>2.13.9. <filesystem>
2.14. 저수준 메모리 제어
2.14.1. <new>2.14.2. <memory>
2.14.2.1. 스마트 포인터 (Smart Pointer)2.14.2.2. 참조 횟수 세기 포인터 (std::shared_ptr)2.14.2.3. 배타적 소유 포인터 (std::unique_ptr)
2.14.3. <scoped_allocator>2.14.4. <memory_resource>
2.15. 병렬성
2.15.1. 스레드
2.15.1.1. <thread>2.15.1.2. <jthread>2.15.1.3. <stop_token>
2.15.2. 상호 배제
2.15.2.1. <mutex>2.15.2.2. <condition_variable>2.15.2.3. <shared_mutex>2.15.2.4. <barrier>2.15.2.5. <latch>
2.15.3. 메모리
2.15.3.1. <atomic>2.15.3.2. <rcu>2.15.3.3. <hazard_pointer>
2.15.4. 비동기 실행
2.15.4.1. <future>2.15.4.2. <coroutine>2.15.4.3. <generator>
3. 여담4. 구현체5. 외부 링크

1. 개요

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

1.1. Standard Library와 STL

C++의 언어 표준 명세와 이를 제정한 표준 라이브러리로서 본래 표준과는 독립적이었던 STL Standard Template Library 와는 다른 물건이다. STL은 여러 유명한 프로그래머의 강연이나 저자물에서 용어를 각기 다르게 사용해서 널리 오해되고 잘못 사용되는 용어이다.[1]

STL을 만든 Alexander Stepanov 는 일반화 프로그래밍 기법에 대한 연구를 했었다. 이 과정에서 자료형에 부여받지 않는 자료구조 알고리즘을 사용하는 일반화 프로그래밍(Generic programming) 개념을 구현하기 위해 개발되었다. 이는 특정 언어와 관련있는 연구는 아니었지만 C++ (1983)에 영향을 주어 STL의 시초를 만들게 되었다. 연구의 결과물인 STL 구현체가 1993년에 C++ 표준안 제정 위원회[2]에 처음 제출되면서 C++과 인연을 맺게 되었고 Meng Lee와 David Musser가 추가로 협력하여 개선한 STL 구현체가 1994년에 C++ 표준으로 승인되었다. 특히 gcc에 내장된 구현체 libstdc++와 Clang에 내장된 구현체인 libc++에 지대한 영향을 끼쳤다.

현재의 C++ standard library가 Stephanov, Lee, Musser가 90년대에 개발한 Standard Template Library(STL)의 아이디어를 많이 수용한 것은 사실이나, C++ 표준 라이브러리와 STL은 서로간의 슈퍼셋도 서브셋도 아니다. C++ 표준안 그 어디에도 STL이라는 표현은 등장하지 않음에도 불구하고 Effective C++의 저자인 Scott Meyers와 같은 거장 프로그래머들이 90년대의 관습 그대로 STL이라는 용어를 자신의 저작물에 지속적으로 사용하는 바람에 STL이라는 용어가 아직도 널리 사용되고 있으며 STL과 C++ standard library의 차이가 뭔지 묻는 수많은 구글 검색 결과가 보여주듯이 초보자들에게 꽤 커다란 혼돈을 주는 요소이다.

2024년 시점에서 초창기 STL의 구현체는 모두 사라지고 그 아이디어만이 살아남아서 C++ Standard Library에 흡수되었으므로 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
선형 연속 컨테이너 # <vector>
# <deque>
# <array>
C++11
# <inplace_vector>
C++26
선형 연결 컨테이너 # <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>
# <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>
# <memory>
# <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>
#
# <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++ 런타임에 필요한 각종 자료형들을 정의한다.


contexpr
_kwp1
long long
&&
[[attr2]]
std
::chrono
::
size_t
::duration
::enum
_pre

val
fun
mem_fn
<
(
concept1
<
T1
, T2
, T3
>
const
int
type1
&
param1
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


표준 라이브러리에서 크기를 나타내기 위해 사용하는 부호없는 정수형의 자료형 별칭. 자세한 내용은 size_t 참조.
contexpr
_kwp1
long long
&&
[[attr2]]
std
::chrono
::
ptrdiff_t
::duration
::enum
_pre

val
fun
mem_fn
<
(
concept1
<
T1
, T2
, T3
>
const
int
type1
&
param1
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


표준 라이브러리에서 주소의 차이를 표현하기 위해 사용하는 부호가 있는 정수형의 자료형 별칭.
nullptr
_kwp1
long long
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
mem_fn
<
(
concept1
<
T1
, T2
, T3
>
const
int
type1
&
param1
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


C++11
0의 주소를 가리키는 포인터를 나타내는 상수.
contexpr
_kwp1
long long
&&
[[attr2]]
std
::chrono
::
nullptr_t
::duration
::enum
_pre

val
fun
mem_fn
<
(
concept1
<
T1
, T2
, T3
>
const
int
type1
&
param1
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


C++11
항상 0의 주소를 가리키는 포인터의 고유한 자료형. decltype(nullptr)로 정의된다.
contexpr
_kwp1
long long
&&
[[attr2]]
std
::chrono
::
max_align_t
::duration
::enum
_pre

val
fun
mem_fn
<
(
concept1
<
T1
, T2
, T3
>
const
int
type1
&
param1
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


C++11
현재 운영체제에서 메모리를 정렬할 수 있는 최대 크기를 가진 자료형의 별칭.
64비트 시스템에서는 보통 std::int64_t다.
enum class
_kwp1
long long
&&
[[attr2]]
std
::chrono
::
byte
::duration
::enum
_pre

val
fun
mem_fn
<
(
concept1
<
T1
, T2
, T3
>
const
int
type1
&
param1
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


C++17
운영체제에 상관없이 1바이트의 크기를 가지는 열거형. 아무런 열거자 멤버를 가지고 있지 않다. C++17부터는 열거형에 임의의 값을 넣을 수 있기 때문에 1 바이트를 표현할 수 있도록 고안되었다.

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 내부로 가져오는 모듈.


  • NULL
  • std::div_t, std::ldiv_t, std::lldiv_t, std::size_t
  • std::malloc(), std::calloc(), std::realloc(), std::free()
  • std::rand(), std::srand()
  • std::qsort(), std::bsearch()
  • std::abort(), std::exit(), std::atexit()
  • std::getenv(), std::system()
  • std::quick_exit()C++11 , std::at_quick_exit()C++11
  • std::aligned_alloc()C++17

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 내부로 가져오는 모듈.
디버그 관련 도구를 제공하는 모듈.



bool
_kwp1
long long
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
is_debugger_present
mem_fn
<
(
concept1
<
T1
, T2
, T3
>
const
int
type1
&
param1
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

noexcept
&
noexcept
>
;


현재 디버그 문맥인지 여부를 반환하는 함수.

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 내부로 가져오는 모듈.
현재 콘솔 환경에서 텍스트 인코딩을 확인하는 기능을 제공하는 모듈.


  • class std::text_encoding
  • enum class std::text_encoding::id

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 내부로 가져오는 모듈.
런타임에 자료형에 대한 메타 정보를 가져올 수 있는 모듈.


  • class std::type_info
  • typeid(): 자료형에 관한 정보를 가져오는 연산자. std::type_info의 인스턴스를 반환한다. [3]

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
  • class std::type_index: 상기한 std::type_info를 비교하거나 연관 컨테이너에서 이용하기 위해 래핑하는 클래스

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 내부로 가져오는 모듈.
현재 실행되는 문맥의 정보를 확인하는 기능을 제공하는 모듈.


  • class std::source_location: C언어에서 수십년간 이용되던 매크로를 대체하여, 현재 소스 파일의 내용과 메타 정보를 접근할 수 있게 도와주는 클래스. 이를 위해 static consteval 멤버 함수를 가지고 있다.

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 내부로 가져오는 모듈.
현재 실행 스택을 확인할 수 있는 인터페이스를 제공하는 모듈.


  • class std::stacktrace_entry: 함수 실행 스택의 정보를 저장하는 클래스. 단일 클래스로는 아무것도 못하고 후술할 std::basic_stacktrace에서 가져와야 한다.
  • class std::basic_stacktrace<Allocator>: 현재 함수의 실행 스택을 목록으로 저장하고 볼 수도 있는 클래스. [4]

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 내부로 가져오는 모듈.
예외 구현 클래스와 예외 관련 유틸리티를 제공하는 모듈.


  • class std::exception: 모든 예외의 부모 클래스.
  • class std::bad_exception: 모든 나쁜 예외의 부모 클래스.

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 내부로 가져오는 모듈.
특수한 목적을 위해 파생된 예외 클래스들을 제공하는 모듈.


  • class std::nested_exception: 중첩해서 던져진 예외를 처리하는 클래스
  • class std::logic_error, std::invalid_argument, std::overflow_errorstd::exception의 특수화 클래스를 제공.

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 내부로 가져오는 모듈.
사용자의 운영체제에 특화된 예외 처리를 지원하는 모듈.


  • enum class std::errc: POSIX 인터페이스를 이용하는 범용 운영체제에서 발생하는 오류의 코드 목록. C언어errno와 관련한 전처리기 상수들을 대체할 수 있다.
  • class std::error_category: 범용 운영체제에서 발생하는 오류를 분류하거나, 발생한 오류 코드의 정보를 찾아볼 수 있는 클래스. 운영체제 특화보다는 C++ 표준에 알맞게 오류를 구분하고 있다.
  • class std::system_error: 현재 운영체제에서 발생한 오류 코드와 내용을 보여주는 클래스. 가령 특정 운영체제의 스레드나 네트워크 소켓에서 오류가 발생하면 그 오류는 C++ 표준에는 없겠지만, try { ... } catch (std::system_error)를 이용할 수 있다면 현재 운영체제에 맞는 오류를 알아낼 수 있다. 이 클래스에서는 std::errcstd::error_category를 멤버 함수를 통해 접근할 수 있다.
  • class std::error_code: 현재 운영체제에서 발생한 오류에 관련된 부호를 저장하는 클래스. 이 클래스 역시도 std::errcstd::error_category를 멤버 함수를 통해 접근할 수 있다. 보통 이 부호는 enum class std::errc와 똑같은 값인, 오류의 종류를 나타내는 숫자이다. 그러나 심지어는 내부 오류 객체에 대한 포인터나 핸들일 수도 있다. 때문에 고유한 부호가 아니라서 똑같은 숫자라도 현재 std::error_category에 따라 의미가 달라질 수 있다.

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 내부로 가져오는 모듈.
단일 숫자의 비트를 조작하는 연산을 제공하는 모듈.


  • bit_cast(): 이 모듈의 핵심 함수로써 숫자의 변환을 메모리의 내용을 그대로 복사한다. 가령 float 6.01fint로 바꾸면 원래는 6이 되겠지만, bit_cast의 결과는 그렇지 않다. 다시 말하면 float 변수를 reinterpret_cast<const char*>로 변환하고 int 변수의 주소에 memcpy를 한것과 똑같이 동작한다. 그런데 이 함수는 결정론적인 수행이 가능하다.
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 내부로 가져오는 모듈.
문자열 클래스와 문자열 변환 함수들을 제공하는 모듈.


  • class std::string: 동적 할당된 문자열 클래스.

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 내부로 가져오는 모듈.
읽기 전용 문자열 클래스를 제공하는 모듈


  • class std::string_view: C 방식의 문자열 또는 std::string을 참조하는 읽기 전용 클래스.

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 내부로 가져오는 모듈.
자명한 자료형과 문자열 사이에 서로 변환하는 기능을 제공하는 모듈


  • enum class std::chars_format: 숫자를 변환할 규칙을 나열한 열거형
  • std::from_chars(): 문자열을 읽어 숫자로 변환하는 함수. T는 정수, 부동소수점 모두 가능하다.
  • std::to_chars(): 숫자를 문자열로 변환하여 문자열 범위에 쓰는 함수. T는 정수, 부동소수점 모두 가능하다.

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를 제공하는 모듈.



class
_kwp1
long long
&&
[[attr2]]
std
::chrono
::
vector
::duration
::enum
_pre

val
fun
mem_fn
<
(
concept1
<
T1
, T2
, T3
>
const
int
T
\
param1
,
concept2
<
T1
, T2
, T3
>
const
int
allocator
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


<colcolor=#a8a8a8,#a1a1a1>이름이 다소 이상하게 붙어 있지만 개념적으로는 크기가 자동으로 동적 할당되는 배열이며 연산자 오버로딩 덕분에 C언어의 배열과 거의 비슷하게 사용할 수 있다.
  • 임의 위치 참조 O(1), 끝에 삽입/삭제 O(1), 끝을 제외한 임의 위치에서의 삽입/삭제 O(n)이다.
constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
push_back
<
(
concept1
<
T1
, T2
, T3
>
const
int
T
&
item
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
push_back
<
(
concept1
<
T1
, T2
, T3
>
const
int
T
&&
item
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


C++11
요소를 인자로 받아 벡터의 맨 뒤쪽에 하나 추가한다.
constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
append_range
<
(
container-compatible-range
<
T
, T2
, T3
>
const
int
Range
&&
range
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


C++23
지정한 범위를 벡터의 맨 뒤쪽에 연달아 추가한다.
constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
pop_back
<
(
concept1
<
T1
, T2
, T3
>
const
int
type1
&
param1
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


벡터의 맨 뒤쪽에 있는 요소를 하나 제거한다.
constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
insert
<
(
concept1
<
T1
, T2
, T3
>
const
int
const_iterator
&
pos
,
concept2
<
T1
, T2
, T3
>
const
int
T
&
item
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
insert
<
(
concept1
<
T1
, T2
, T3
>
const
int
const_iterator
&
pos
,
concept2
<
T1
, T2
, T3
>
const
int
T
&&
item
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


C++11
지정한 순회자의 뒤쪽에 요소를 하나 추가한다. const_iterator는 해당 벡터의 순회자만 사용할 수 있다.
constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
insert
<
(
concept1
<
T1
, T2
, T3
>
const
int
const_iterator
&
pos
,
concept2
<
T1
, T2
, T3
>
const
int
size_type
&
count
,
concept3
<
T1
, T2
, T3
>
const
int
T
&
copy_item
, param4
, param5
, ...
)

const
&
noexcept
>
;


constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
insert
<
(
concept1
<
T1
, T2
, T3
>
const
int
const_iterator
&
pos
,
concept2
<
T1
, T2
, T3
>
const
int
InputIterator
&
first
,
concept3
<
T1
, T2
, T3
>
const
int
InputIterator
&
last
, param4
, param5
, ...
)

const
&
noexcept
>
;


constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
insert
<
(
concept1
<
T1
, T2
, T3
>
const
int
const_iterator
&
pos
,
concept2
<
T1
, T2
, T3
>
const
int
initializer_list
&
list
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
insert_range
<
(
concept1
<
T1
, T2
, T3
>
const
int
const_iterator
&
pos
,
container-compatible-range
<
T
, T2
, T3
>
const
int
Range
&&
range
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


C++23
지정한 순회자의 뒤쪽에 요소를 여러개 연달아 추가한다. const_iterator는 해당 벡터의 순회자만 사용할 수 있다.
constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
erase
<
(
concept1
<
T1
, T2
, T3
>
const
int
iterator
&
pos
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
erase
<
(
concept1
<
T1
, T2
, T3
>
const
int
const_iterator
&
pos
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
erase
<
(
concept1
<
T1
, T2
, T3
>
const
int
iterator
&
first
,
concept2
<
T1
, T2
, T3
>
const
int
iterator
&
item
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
erase
<
(
concept1
<
T1
, T2
, T3
>
const
int
const_iterator
&
first
,
concept2
<
T1
, T2
, T3
>
const
int
const_iterator
&
item
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


지정한 순회자 혹은 순회자 범위 내의 요소를 모두 삭제한다. 그러나 할당된 메모리 공간은 줄이지 않는다.
constexpr
_kwp1
void
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
clear
<
(
concept1
<
T1
, T2
, T3
>
const
int
type1
&
param1
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


벡터의 요소를 모두 삭제한다. 그러나 할당된 메모리 공간은 줄이지 않는다.
constexpr
_kwp1
long long
&&
[[attr2]]
std
::chrono
::
size_t
::duration
::enum
_pre

val
fun
size
<
(
concept1
<
T1
, T2
, T3
>
const
int
type1
&
param1
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


벡터의 크기를 부호없는 정수형으로 반환한다.
constexpr
_kwp1
bool
&&
[[attr2]]
std
::chrono
::
system_clock
::duration
::enum
_pre

val
fun
empty
<
(
concept1
<
T1
, T2
, T3
>
const
int
type1
&
param1
,
concept2
<
T1
, T2
, T3
>
const
int
type2
&
param2
,
concept3
<
T1
, T2
, T3
>
const
int
type3
&
param3
, param4
, param5
, ...
)

const
&
noexcept
>
;


벡터가 비어있는지 아닌지 여부를 반환한다.

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를 제공하는 모듈.


  • class std::bitset: 비트 묶음을 표현하는 클래스. 1비트에서 다중 비트까지 다양한 연산을 지원한다. 문자열, 32비트 숫자, 64비트 숫자로 변환도 지원한다.

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를 제공하는 모듈.


  • class std::deque: 앞/끝 모두에서 O(1)로 삽입/삭제가 가능하지만 std::vector와는 달리 메모리 상에서 연속적인 공간으로 할당되지는 않는다.

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를 제공하는 모듈.


  • class std::list: 양방향 연결 리스트 클래스. 임의 위치 참조 불가, 검색 O(n), 대신 위치를 알고 있는 경우 어느 위치에서나 삽입/삭제 O(1). 이러한 특성상 한 개씩 스캐닝하면서 빈번히 삽입/삭제를 해야 하는 경우에 유용하다.

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을 제공하는 모듈.


  • class std::set, std::multiset: 정렬이 가능한 객체들을 담기 위한 container로 삽입 시점부터 정렬된 상태로 저장된다. 구현은 대개의 경우(사용가능한 범위 내에서는 전부라고 해도 무방할 정도로) red-black tree를 이용한다. 삽입/검색/삭제 O(log n). 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을 제공하는 모듈.


  • class std::map, std::multimap: std::set과 거의 비슷하나 그냥 객체만 저장하는 것이 아니라 정렬이 가능한 key와 그 key가 가리키는 객체의 pair로 저장된다. std::map은 key가 유일해야 하며, 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를 제공하는 모듈.


  • class 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을 제공하는 모듈


  • class std::unordered_set, std::unordered_multiset: std::set, std::multiset과 같은 동작을 하지만 red-black tree 대신 hash로 구현된다. 그래서 삽입된 값이 정렬되지 않으며 시간복잡도도 hash의 특성을 따른다. 삽입/검색/삭제는 평균적으로 O(1), 최악의 경우 O(n).

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을 제공하는 모듈


  • class std::unordered_map, std::unordered_multimap: std::set, std::multiset, std::map, std::multimap과 같은 동작을 하지만 red-black tree 대신 hash로 구현된다. 그래서 삽입된 값이 정렬되지 않으며 시간복잡도도 hash의 특성을 따른다. 삽입/검색/삭제는 평균적으로 O(1), 최악의 경우 O(n).

2.8. 컨테이너 어댑터

2.8.1. <stack>

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


  • class std::stack: 위의 컨테이너들을 이용하여 구현된 스택 클래스

2.8.2. <queue>

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


  • class std::queue: 위의 컨테이너들을 이용하여 구현된 클래스.
  • class std::priority_queue: 위의 컨테이너들을 이용하여 구현된 우선순위 큐 클래스.

2.8.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 내부로 가져오는 모듈.
컨테이너 어댑터에 속하며 컨테이너는 아니다.


  • class std::flat_set

2.8.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 내부로 가져오는 모듈.
컨테이너 어댑터에 속하며 컨테이너는 아니다.


  • class std::flat_map

2.9. 순회자

2.9.1. <iterator>

컨테이너의 원소를 순회하는 방법을 추상화한 명세.
  • forward_iterator_tag
  • reverse_iterator_tag
  • insert_iterator_tag
  • input_iterator_tag
  • output_iterator_tag
  • bidirectional_iterator
  • random_iterator_tag

2.10. 알고리즘

2.10.1. <algorithm>

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


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

2.10.2. <numeric>

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



2.10.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.11. 범위

2.11.1. <span>

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


  • class std::span: 연속된 메모리 공간을 참조하는 읽기 전용 클래스.

2.11.2. <ranges>

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



2.11.3. <mdspan>

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


  • class std::mdspan: 모든 유형의 메모리 공간을 다차원 방식으로 접근하는 읽기 전용 클래스.

2.12. 입/출력

2.12.1. <iostream>

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



2.12.2. <iomanip>

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



2.12.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.12.4. <sstream>

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



2.12.5. <fstream>

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



2.12.6. <syncstream>

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



2.12.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++ 스트림으로의 문자열을 출력하는 기능을 제공하는 모듈


  • std::print(), std::println()

2.13. 유틸리티

2.13.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.13.2. <functional>

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



2.13.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.13.4. <compare>

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


  • class std::weak_order, std::strong_order, std::partial_order
  • std::compare_three_way()

2.13.5. 컨테이너

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


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


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


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


  • class std::optional
  • class std::nullopt_t, std::nullopt

2.13.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.13.7. <chrono>

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



  • 시간 C++11
  • 달력, 시간대 C++20

2.13.8. <locale>

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



2.13.9. <filesystem>

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



2.14. 저수준 메모리 제어

2.14.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.14.2. <memory>

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



2.14.2.1. 스마트 포인터 (Smart Pointer)
많은 메모리 문제를 방지하기 위해 Modern C++에서는 raw 포인터의 사용은 자제하도록 권고된다. C++ 문서에서 귀에 못이 박히도록 설명하고 있지만, 현세대 C++에서 가장 큰 문제점을 안고 있는 부분이므로 대신 표준 라이브러리의 포인터 래퍼 또는 스마트 포인터를 사용하길 바란다. 굳이 써야 한다면 성능이 정말 중요한 부분 또는 인터페이스에는 보이지 않는 cpp 소스 구현 부분에만 포인터를 사용하는 것이 좋다.

표준 라이브러리의 스마트 포인터는 std::shared_ptr, std::unique_ptr 두 종류가 있다.
2.14.2.2. 참조 횟수 세기 포인터 (std::shared_ptr)
std::shared_ptr는 참조 횟수를 세는 방식을 쓰기 때문에 해당 포인터를 잡고 있는 모든 범위에서 벗어나면 스스로 해제된다.

<C++ 예제 보기>
#!syntax cpp
#include <memory>

long acquire_value_1(std::shared_ptr<long> ptr)
{
    // ptr의 참조 횟수 증가
    return *ptr;
}

long acquire_value_2(const std::shared_ptr<long>& ptr)
{
    // ptr의 참조 횟수 유지
    return *ptr;
}

long acquire_value_3(std::shared_ptr<long>&& ptr)
{
    // ptr은 이 함수가 끝나자 마자 바로 소멸
    return *ptr;
}

int main()
{
    // (1) std::shared_ptr<long>
    auto ptr1 = std::make_shared<long>(472012831L);
    // ptr1의 참조 횟수: 1

    // (1-1a) std::weak_ptr<long>
    std::weak_ptr ptr1_weaker = ptr1;
    // ptr1의 참조 횟수: 1

    // (1-1b) std::shared_ptr<long>
    std::shared_ptr ptr1_derive = ptr1;
    // ptr1의 참조 횟수: 2

    // (1-2) std::shared_ptr<long>
    auto ptr1_again = ptr1_weaker.lock();
    // ptr1의 참조 횟수: 3

    long val1 = acquire_value_1(ptr1);
    // ptr1의 참조 횟수: 4

    long val2 = acquire_value_2(ptr1);
    // ptr1의 참조 횟수: 4

    long val3 = acquire_value_2(std::move(ptr1));
    // ptr1의 참조 횟수: 4

    // 4000 반환
    long val4 = acquire_value_3(std::make_shared<long>(4000));

    // (2) std::shared_ptr<int[]>
    std::shared_ptr<int[]> ptr(new int[128]);
}
여담으로 std::shared_ptr는 몇가지 문제가 있는데, 첫번째로 성능이 느린 편이고, 두번째로는 순환 참조 문제가 발생할 가능성이 있다. 이를 해결하기 위해 소유권이 없는 도우미 클래스 std::weak_ptr를 제공한다. std::weak_ptrstd::shared_ptr를 가져올 수 있으며 그외에도 소멸 여부와 참조 횟수를 확인할 수 있다. 이를 통하면 std::shared_ptr를 더 안정적으로 사용할 수 있다. 상기한 예제는 std::shared_ptrstd::weak_ptr의 동작 방식을 보여준다.

한편 대다수의 프로그램은 관리하는 객체 하나를 두고 이에 파생된 하위 객체를 통해 동작하는 방식인데 이 경우 공유 포인터를 쓸 일이 많지는 않다. 대부분은 관리 클래스에서 할당한 메모리를 읽기만 하면 충분하므로 std::unique_ptr를 응용하면 좋다.
2.14.2.3. 배타적 소유 포인터 (std::unique_ptr)
std::unique_ptr는 단일 소유권만 인정하는 스마트 포인터다. std::unique_ptr를 소유하지 않은 인스턴스에서는 메모리 해제가 불가능하다. 즉 오직 소멸자에서만 메모리가 해제할 수 있다. 또한 std::unique_ptr 자체적으로는 복사가 불가능하고 이동 연산만 가능하다는 특징이 있다.


파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 문서의 r22에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r22 ( 이전 역사)
문서의 r ( 이전 역사)

2.14.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.14.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.15. 병렬성

2.15.1. 스레드

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



2.15.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.15.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* 류의 클래스다.


  • class std::stop_token
  • class std::stop_source
  • class std::stop_callback

2.15.2. 상호 배제

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


  • class std::mutex
  • class std:timed_mutex: 일정 시간 동안만, 또는 특정 시각까지 잠기거나 잠금을 풀 수 있는 락 클래스.
  • class std::recursive_mutex: 중복되어 잠길 수 있는 락 클래스. 실제로 완전히 잠금이 풀리려면 잠겼던 횟수만큼 다시 잠금을 풀어야 한다.
2.15.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 내부로 가져오는 모듈.
다수의 스레드 사이에서 잠금을 기반으로 스레드의 실행 순서를 제어하는 기능을 제공하는 모듈.


  • class std::condition_variable: std::unique_lock<std::mutex>을 받아 락의 소유권을 배타적으로 점유해놨다가 동시성 실행 점유권을 다른 스레드로 넘길 수 있는 클래스.
  • class std::condition_variable_any: std::unique_lock<std::mutex> 말고도 다른 종류의 락을 사용할 수 있는 동시성 제어 클래스.
2.15.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 내부로 가져오는 모듈.
좀 더 유연한 상호배제 전략을 이용한 잠금 기능을 제공하는 모듈.


  • class std::shared_mutex: 유일한 쓰기 접근과 다수의 읽기 접근이 가능한 락 클래스. 쓰는 작업에만 std::mutex처럼 상호배제 전략을 사용한다. 읽기의 경우 제한이 없으며 모든 읽기/쓰기가 끝날 때 까지 락 인스턴스의 소멸을 막는 역할을 한다.
2.15.2.4. <barrier>
||<tablewidth=100%><:><color=#282020,#e5e5e5><width=24%><height=32>이름||<colbgcolor=#FFFFFF,#1F2023>barrier||
지원 버전
C++20
C++20 ~ C++
레퍼런스 링크
없음
상태
지원됨
파면됨
제거됨
설명
C언어의 헤더 <.h>로부터 구성요소들을 이름공간 std 내부로 가져오는 모듈.


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


  • class std::latch

2.15.3. 메모리

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


  • class std::atomic
  • class std::atomic_refC++20
2.15.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.15.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.15.4. 비동기 실행

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



2.15.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.15.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만 동일하면 되므로 자기 자신만의 구현체를 만들어 볼 수도 있고 다른 구현체와 성능을 비교해보면 재미있을 것이다. 구현체의 종류는 대략 아래와 같은 것들이 있다.
  • SGI STL - Alexander Stepanov의 구현체를 기반으로 하는 구현체로, 이름 그대로 실리콘 그래픽스사에서 개발하였다. 다른 많은 구현체들이 이 버전을 기반으로 하고 있을 정도로 가장 잘 알려진 구현체라고 할 수 있다. 개발이 중단된 지 오래되었다.
  • Dinkumware STL - Visual Studio에서 이를 기반으로 개량해서 사용했는데 성능에서 안 좋은 얘기를 많이 들었다.
  • STLPort - SGI의 구현체를 기반으로 하고 있는 구현체. 과거에 괜찮은 속도로 Visual Studio에서 STLPort를 가져다가 사용하는 경우도 잦았으나 지금은 업데이트가 되지 않고 있다.
  • EASTL - EA SPORTS에서 구현한 STL로, 게임 회사들은 이처럼 퍼포먼스 극대화를 위해 자체적으로 STL을 개발하여 쓰기도 한다.
  • TSTL - TypeScript에 포팅된 STL 구현체. 이례적으로 C++가 아닌 다른 언어에 구현된 STL.

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

5. 외부 링크



[1] 예를 들면 Standard Template Library의 약자라는 설, Stephanov와 Lee가 근무하던 Software Technology Laboratory의 약자라는 설, STephanov and Lee의 약자라는 설, 등등. Stephanov와 Lee가 직접 작성한 Hewlet-Packard 버전의 최초의 STL이나, 실질적으로 더 널리 쓰이던 Silicon Graphics 버전의 SGI STL은 더 이상 관리가 되지 않고 방치가 된 지 오래이고, SGI STL을 계승하려고 노력하던 STLPort도 개발이 중단되었다. [2] 이 위원회의 결과물이 C++98 표준이다. [3] 가상 클래스는 오버헤드가 있으므로 주의해야 한다. dynamic_cast처럼 상속 테이블을 죄다 뒤져보기 때문이다. [4] 여담으로 템플릿이지만 오직 할당자만 템플릿 인자로 받고 있다. 즉 std::basic_stacktrace는 할당자로 생성된 객체가 std::stacktrace_entry를 구현하기만 하면 괜찮다는 의미다.