C++ 표준 라이브러리

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

C++ 표준 라이브러리는 C++ 프로그래밍 언어에서 널리 사용되는 라이브러리로, 다양한 자료 구조와 알고리즘, 유틸리티를 제공하여 C++ 프로그램 개발을 지원한다. 컨테이너, 일반 기능, 문자열, 스트림과 입출력, 수치 처리, 스레드 지원, C 표준 라이브러리 기능 등을 포함하며, C++11, C++20, C++23, C++26 등 여러 버전에서 새로운 기능들이 지속적으로 추가되고 있다.

C++ 표준 라이브러리
개요
종류C++ 클래스와 함수 모음
특징C++ 프로그래밍 언어에서 사용
내용
입출력입출력
문자열 처리문자열
표준 템플릿 라이브러리 (STL)
알고리즘algorithm
함수형functional
시퀀스 컨테이너벡터
연관 컨테이너연관 컨테이너
불규칙 연관 컨테이너불규칙 연관 컨테이너
C 표준 라이브러리
자료형 제한
문자 분류
문자열
수학 함수
파일 입출력<stdio.h>
날짜/시간
지역화
동적 메모리 할당
프로세스 제어
신호 처리
대체 토큰<iso646.h>
기타 헤더
어설션
오류 번호
비지역 점프
가변 인수
📚 더 읽어볼만한 페이지
  • C++ 표준 라이브러리 - 표준 템플릿 라이브러리
    표준 템플릿 라이브러리(STL)는 알렉산더 스테파노프의 주도로 탄생한 C++ 라이브러리로서, 제네릭 프로그래밍을 지원하기 위해 컨테이너, 반복자, 알고리즘, 함수 객체 등의 핵심 구성 요소로 이루어져 있으며, HP에서 무료로 공개한 구현을 기반으로 다양한 구현체가 존재한다.
  • C++ 표준 라이브러리 - Iostream
    `iostream`은 C++에서 입출력 작업을 수행하기 위한 표준 라이브러리로, 스트림 버퍼, 지원 클래스, 입/출력 스트림으로 구성되며, 표준 입력, 출력, 에러, 로깅 객체를 제공하고 출력 형식 제어 기능을 제공하지만 비판도 존재한다.

2. 컨테이너

C++ 표준 라이브러리는 데이터를 저장하고 관리하며, 특정한 목적과 성능 특성을 가지는 다양한 자료 구조인 컨테이너들을 제공한다.

C++ 프로그램이 사용할 수 있는 컨테이너 자료 구조 구성 요소는 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
`std::array`C++11TR1에 추가되었다. 고정 크기 배열의 컨테이너인 `std::array` 컨테이너 클래스 템플릿을 제공한다.
`std::bitset`비트 배열인 특수 컨테이너 클래스 `std::bitset`을 제공한다.
`std::deque`std::deque 컨테이너 클래스 템플릿, 양쪽 끝 큐를 제공한다.
`std::forward_list`C++11TR1에 추가되었다. 단일 연결 목록인 `std::forward_list` 컨테이너 클래스 템플릿을 제공한다.
`std::map`정렬된 연관 배열 및 멀티맵인 `std::map` 및 `std::multimap` 컨테이너 클래스 템플릿을 제공한다.
`std::queue`단일 끝 인 `std::queue` 컨테이너 어댑터 클래스, 그리고 우선순위 큐인 `std::priority_queue`를 제공한다.
`std::set`정렬된 연관 컨테이너 또는 집합인 `std::set` 및 `std::multiset` 컨테이너 클래스 템플릿을 제공한다.
`std::stack`스택인 `std::stack` 컨테이너 어댑터 클래스를 제공한다.
`std::unordered_map`C++11TR1에 추가되었다. 해시 테이블인 `std::unordered_map` 및 `std::unordered_multimap` 컨테이너 클래스 템플릿을 제공한다.
`std::unordered_set`C++11TR1에 추가되었다. `std::unordered_set` 및 `std::unordered_multiset` 컨테이너 클래스 템플릿을 제공한다.
`std::vector`동적 배열인 `std::vector` 컨테이너 클래스 템플릿을 제공한다.


각 컨테이너는 특정한 자료구조를 표현하며, 다음과 같이 분류할 수 있다.

* 배열 기반 컨테이너: `std::array`, `std::vector`, `std::deque`
* 연결 리스트 기반 컨테이너: `std::forward_list`, `std::list`
* 연관 컨테이너: `std::map`, `std::multimap`, `std::set`, `std::multiset`
* 해시 테이블 기반 컨테이너: `std::unordered_map`, `std::unordered_multimap`, `std::unordered_set`, `std::unordered_multiset`
* 기타 컨테이너: `std::bitset`, `std::queue`, `std::priority_queue`, `std::stack`

2.1. 배열 기반 컨테이너

C++ 표준 라이브러리에서 배열 기반 컨테이너는 연속적인 메모리 공간에 데이터를 저장하는 자료구조이다. 이러한 컨테이너는 빠른 접근 속도를 제공하지만, 크기 변경이 어렵거나 비용이 많이 들 수 있다.

👆
좌우로 밀어서 보기
이름설명추가된 버전
`std::array`고정 크기 배열 컨테이너C++11, TR1
`std::vector`동적 배열 컨테이너
`std::deque` 컨테이너


* `std::array`는 고정된 크기의 배열을 나타낸다.
* `std::vector`는 필요에 따라 크기가 동적으로 변하는 배열을 나타낸다.
* `std::deque`는 양쪽 끝에서 효율적으로 원소를 추가하거나 제거할 수 있는 컨테이너이다.

표준 템플릿 라이브러리도 참조

2.1.1. `std::array`

C++11과 TR1에서 새로 추가된 고정 크기 배열을 위한 컨테이너로 `std::array` 컨테이너 클래스 템플릿을 제공한다. `std::array`는 `std::vector`와 유사하지만, 크기가 컴파일 시간에 결정되므로 실행 시간 오버헤드가 적다는 장점이 있다.

2.1.2. `std::vector`

`std::vector`는 동적 배열인 std::vector 컨테이너 클래스 템플릿을 제공한다. `std::vector`는 크기가 자동으로 조절되는 동적 배열 컨테이너로, 데이터 추가 및 삭제가 빈번하게 발생하는 경우에 유용하다.

2.1.3. `std::deque`

인 `std::deque` 컨테이너 클래스 템플릿을 제공한다.

2.2. 연결 리스트 기반 컨테이너

C++ 표준 라이브러리에서 제공하는 연결 리스트 기반 컨테이너는 노드들이 서로 연결된 형태로 데이터를 저장한다. 이러한 구조는 데이터의 삽입 및 삭제를 빠르게 수행할 수 있도록 해주지만, 특정 위치의 요소에 접근하는 속도는 느릴 수 있다는 특징이 있다. C++ 표준 라이브러리는 단일 연결 리스트인 `std::forward_list`와 이중 연결 리스트인 `std::list`를 제공한다.

2.2.1. `std::forward_list`

C++11과 TR1에서 새로 추가되었다. 단일 연결 리스트인 `std::forward_list` 컨테이너 클래스 템플릿을 제공한다.

2.2.2. `std::list`

이중 연결 리스트인 `std::list` 컨테이너 클래스 템플릿을 제공한다.

2.3. 연관 컨테이너

연관 컨테이너는 키(key)와 값(value)의 쌍으로 데이터를 저장하며, 키를 기준으로 데이터를 정렬하여 저장하므로 검색 속도가 빠르다.

* `std::map`와 `std::multimap`: 맵과 멀티맵을 제공하는 컨테이너 클래스 템플릿이다.
* `std::set`와 `std::multiset`: 집합을 제공하는 컨테이너 클래스 템플릿이다.

2.3.1. `std::map`

`std::map`와 `std::multimap` 컨테이너 클래스 템플릿을 제공한다. `std::map`는 키와 값의 쌍을 저장하는 연관 컨테이너이다. 키는 중복될 수 없으며, 정렬된 상태로 저장된다.

2.3.2. `std::multimap`

`std::multimap`는 `std::map`과 유사하지만, 키의 중복을 허용하는 연관 컨테이너 클래스 템플릿이다. `` 헤더 파일에 정의되어 있다.

2.3.3. `std::set`

정렬된 연관 컨테이너 또는 집합인 `std::set`와 `std::multiset` 컨테이너 클래스 템플릿을 제공한다.

2.3.4. `std::multiset`

정렬된 연관 컨테이너 또는 집합인 `std::set`와 `std::multiset` 컨테이너 클래스 템플릿을 제공한다. `std::multiset`은 `std::set`과 유사하지만, 키의 중복을 허용한다.

2.4. 해시 테이블 기반 컨테이너

C++11과 TR1에서 새로 추가된 해시 테이블 기반 컨테이너는 해시 함수를 사용하여 데이터를 저장한다. 매우 빠른 검색 속도를 제공하지만, 데이터의 순서는 보장되지 않는다. `std::unordered_map`, `std::unordered_multimap`, `std::unordered_set`, `std::unordered_multiset` 등이 이에 해당한다.

2.4.1. `std::unordered_map`

C++11과 TR1에서 새로 추가되었다. 해시 테이블인 `std::unordered_map`와 `std::unordered_multimap` 컨테이너 클래스 템플릿을 제공한다.

2.4.2. `std::unordered_multimap`

C++11과 TR1에서 새로 추가되었다. 해시 테이블인 `std::unordered_map`와 `std::unordered_multimap` 컨테이너 클래스 템플릿을 제공한다. `std::unordered_multimap`는 `std::unordered_map`과 유사하지만, 키의 중복을 허용한다.

2.4.3. `std::unordered_set`

C++11과 TR1에서 새로 추가된 `std::unordered_set`와 `std::unordered_multiset` 컨테이너 클래스 템플릿을 제공한다.

2.4.4. `std::unordered_multiset`

`std::unordered_multiset`는 C++11과 TR1에서 새로 추가된 컨테이너 클래스 템플릿 중 하나이다. std::unordered_set과 유사하지만, 키의 중복을 허용한다.

2.5. 기타 컨테이너

C++ 표준 라이브러리는 다음과 같은 기타 컨테이너들을 제공한다.

* ``: C++11과 TR1에서 추가된 고정 크기 배열을 위한 컨테이너인 `std::array`를 제공한다.
* ``: 인 `std::deque`를 제공한다.
* ``: C++11과 TR1에서 추가된 단일 연결 리스트인 `std::forward_list`를 제공한다.
* ``: 이중 연결 리스트인 `std::list`를 제공한다.
* ``: 연관 배열과 멀티맵인 `std::map`와 `std::multimap`를 제공한다.
* ``: 정렬된 연관 컨테이너 또는 집합인 `std::set`와 `std::multiset`를 제공한다.
* ``: C++11과 TR1에서 추가된 해시 테이블인 `std::unordered_map`와 `std::unordered_multimap`를 제공한다.
* ``: C++11과 TR1에서 추가된 `std::unordered_set` 와 `std::unordered_multiset`를 제공한다.
* ``: 동적 배열인 std::vector를 제공한다.

2.5.1. `std::bitset`

비트 배열을 표현하는 특수화된 컨테이너 클래스인 `std::bitset`을 제공한다.

2.5.2. `std::queue`

`std::queue`는 큐의 일종으로, FIFO(First-In, First-Out) 방식으로 데이터를 저장하는 컨테이너 어댑터 클래스이다. `std::queue`와 우선순위 큐인 `std::priority_queue`를 제공한다.

2.5.3. `std::priority_queue`

`std::priority_queue`는 우선순위 큐 컨테이너 어댑터 클래스이다. 저장된 요소들 중 우선순위가 가장 높은 요소가 먼저 반환된다.

2.5.4. `std::stack`

`std::stack`은 LIFO(Last-In, First-Out, 후입선출) 방식으로 데이터를 저장하는 스택 컨테이너 어댑터 클래스이다.

3. 일반 기능

C++ 표준 라이브러리는 표준 템플릿 라이브러리(STL)의 영향을 받아 만들어졌으며, 컨테이너 외에도 여러 유틸리티 기능을 제공한다. 이러한 기능들은 C++ 프로그래밍의 효율성과 편의성을 높여준다.

C++ 표준 라이브러리의 일반 기능 관련 구성 요소는 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
<any>C++17에 추가됨. 형식 지움 클래스 `std::any`를 제공한다.
<atomic>C++11에 추가됨. 클래스 템플릿 `std::atomic`, 여러 템플릿 특수화 및 더 많은 원자 연산을 제공한다.
<chrono>`std::chrono::duration`, `std::chrono::time_point` 및 시계 같은 시간 요소를 제공한다. C++20부터 달력, 시간대, 더 많은 클럭 및 문자열 시계열 형식 지정과 같은 상당한 양의 시간적 기능이 추가되었다.
<concepts>C++20에 추가됨. 기본적인 라이브러리 개념을 제공한다.
<expected>C++23에 추가됨. 클래스 템플릿 `std::expected`, 결과 유형을 제공한다.
<functional>표준 알고리즘과 함께 사용하도록 설계된 여러 함수 객체를 제공한다.
<generator>C++23에 추가됨. 범위에서 중첩된 yield 연산을 추가로 지원하는 코루틴 제너레이터를 제공한다.
<memory>`std::unique_ptr` 클래스 템플릿을 포함하여 C++의 메모리 관리 기능을 제공한다.
<memory_resource>C++17에 추가됨. 런타임에 동작을 변경할 수 있는 다형성 메모리 할당자를 만드는 기능을 제공한다.
<optional>C++17에 추가됨. 클래스 템플릿 `std::optional`, 선택적 유형을 제공한다.
<scoped_allocator>C++11에 추가됨. `std::scoped_allocator_adaptor`를 제공한다.
<stacktrace>C++23에 추가됨. 스택 추적 연산을 제공한다.
<stdexcept>`std::logic_error` 및 `std::runtime_error`와 같은 표준 예외 클래스를 포함하며, 둘 다 `std::exception`에서 파생된다.
<system_error>C++11에 추가됨. `std::error_code`를 정의한다.
<tuple>C++11 및 TR1에 추가됨. 클래스 템플릿 `std::tuple`, 튜플을 제공한다.
<type_traits>C++11에 추가됨. 유형으로 작업하는 메타프로그래밍 기능을 제공한다.
<utility>클래스 템플릿 `std::pair` (두 멤버 튜플), 컴파일 시간 정수 시퀀스, 어휘 유형 구성 도우미, `std::move` 및 `std::forward`와 같은 함수 등 다양한 유틸리티를 제공한다. 비교 연산자를 자동으로 생성하기 위한 `std::rel_ops` 네임스페이스는 새로운 기본 비교 연산자를 선호하여 C++20에서 더 이상 사용되지 않는다.
<variant>C++17에 추가됨. 클래스 템플릿 `std::variant`, 태그된 유니온 유형을 제공한다.


C++ 프로그램 개발 지원에 사용되는 구성 요소는 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
<compare>C++20에 추가됨. 삼원 비교 연산자 지원을 제공한다.
<coroutine>C++20에 추가됨. 코루틴 지원을 제공한다.
<debugging>C++26에 추가됨. 디버깅 지원을 제공한다.
<exception>`std::exception`을 포함하여 예외 처리와 관련된 여러 유형 및 함수를 제공하며, 이는 표준 라이브러리에서 발생한 모든 예외의 기본 클래스이다.
<initializer_list>C++11에 추가됨. 초기화 리스트 지원을 제공한다.
<limits>기본 숫자 형식의 속성을 설명하는 데 사용되는 클래스 템플릿 `std::numeric_limits`를 제공한다.
<new>C++ 메모리 관리의 기본을 구성하는 연산자 `new` 및 `delete`와 기타 함수 및 유형을 제공한다.
<source_location>C++20에 추가됨. `__LINE__`과 같은 미리 정의된 매크로의 대안으로 소스 위치 정보를 캡처하는 기능을 제공한다.
<stdfloat>C++23에 추가됨. 확장된 부동 소수점 형식에 대한 조건부 지원을 제공한다.
<typeinfo>C++ 런타임 형식 정보를 다루는 기능을 제공한다.
<version>C++20에 추가됨. C++ 표준 라이브러리 구현에 대한 정보를 제공한다.


* 함수 객체 (): 표준 알고리즘과 함께 사용되는 함수 객체들을 정의한다.
* 메모리 관리 (): `std::unique_ptr`를 포함한 메모리 관리 기능을 제공한다.
* 튜플 (): `std::tuple` 클래스 템플릿을 제공한다.
* 시간 관련 기능 (): std::chrono::duration, std::chrono::time_point 및 시계 같은 시간 요소를 제공한다.
* 기타 유틸리티 (): 객체 쌍( `std::pair` ), `std::move` 및 `std::forward`와 같은 다양한 유틸리티를 제공한다.
* 예외 처리 (): `std::logic_error` 및 `std::runtime_error`와 같은 표준 예외 클래스를 포함한다.

3.1. 알고리즘

cpp
#include

`` 헤더는 컨테이너의 요소들에 대해 다양한 연산을 수행하는 알고리즘들을 제공한다. 정렬, 검색, 복사, 변경 등 다양한 알고리즘이 포함되어 있다.

C++ 표준 라이브러리의 주목할 만한 특징은 일반 알고리즘의 구문과 의미를 지정할 뿐만 아니라, 그들의 성능에 대한 요구 사항도 설정한다는 것이다. 이러한 성능 요구 사항은 종종 잘 알려진 알고리즘에 해당하며, 사용이 예상되지만 필수는 아니다. 대부분의 경우 이는 선형 시간 O(n) 또는 선형 로그 시간 O(n log n)을 필요로 하지만, 일부 경우 준선형 시간 O(n log2 n)과 같이 더 높은 상한이 허용된다.

예를 들어 이전에는 정렬이 평균적으로 O(n log n) 시간만 걸리면 되었고, 실제로는 빠르지만 최악의 경우 성능이 좋지 않은 퀵 정렬의 사용이 허용되었지만, 인트로 정렬이 도입되어 빠르고 평균적인 성능과 최적의 최악의 경우 복잡성을 모두 허용했으며, C++11부터 정렬은 최악의 경우 선형 로그 시간을 보장한다. 다른 경우에는 선택과 같은 요구 사항이 더 느슨하게 유지되며, 평균적으로만 선형 (예: 퀵 선택)일 뿐, 인트로 선택에서와 같이 최악의 경우 선형일 필요는 없다.

C++ 프로그램이 반복자, 범위, 범위 및 컨테이너에 대한 알고리즘을 조작하는 데 사용할 수 있는 구성 요소는 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
``컨테이너 및 기타 범위에 사용할 수 있는 많은 알고리즘의 정의를 제공한다.
``C++17에 추가되었다. 병렬화된 알고리즘에 대한 실행 정책을 제공한다.
``반복자를 사용하여 작업하기 위한 클래스 및 템플릿을 제공한다.
``일반화된 숫자 알고리즘.
``C++20에 추가되었다. 범위 기능과 지연 평가 어댑터를 제공한다.

3.2. 반복자

`` 헤더는 컨테이너의 요소들에 접근하고 순회하는 데 사용되는 반복자(iterator)와 관련된 클래스와 템플릿을 제공한다.

C++ 프로그램이 반복자, 범위, 범위 및 컨테이너에 대한 알고리즘을 조작하는 데 사용할 수 있는 구성 요소는 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
컨테이너 및 기타 범위에 사용할 수 있는 많은 알고리즘의 정의를 제공한다.
C++17에 추가되었으며, 병렬화된 알고리즘에 대한 실행 정책을 제공한다.
반복자를 사용하여 작업하기 위한 클래스 및 템플릿을 제공한다.
일반화된 숫자 알고리즘.
C++20에 추가되었으며, 범위 기능과 지연 평가 어댑터를 제공한다.

3.3. 함수 객체

`` 헤더는 표준 알고리즘과 함께 사용하도록 설계된 여러 함수 객체를 제공한다. 함수 객체는 함수 호출 연산자를 오버로딩하여 함수처럼 동작하는 객체이다. 이러한 함수 객체는 알고리즘에 사용자 정의 동작을 지정하는 데 사용될 수 있다.

3.4. 메모리 관리

`` 헤더는 C++에서 메모리 관리를 위한 기능들을 제공하며, 여기에는 클래스 템플릿 `std::unique_ptr`이 포함된다.

C++ 표준 라이브러리의 `` 헤더는 동적 메모리 할당 및 관리를 위한 기능들을 제공한다. 특히, `std::unique_ptr`, `std::shared_ptr` 등의 스마트 포인터를 사용하여 메모리 누수를 방지할 수 있다.

3.5. 예외 처리

`` 헤더는 예외 처리와 관련된 여러 타입들과 함수들을 제공하며, 여기에는 표준 라이브러리에서 발생되는 모든 예외들의 기본 클래스인 `std::exception`이 포함된다. 또한, `` 헤더는 `std::logic_error`와 `std::runtime_error`와 같은 표준 예외 클래스들을 포함하고 있으며, 이들 모두 `std::exception` 클래스를 상속받는다.

사용자는 `std::exception` 클래스를 상속하여 자신만의 예외 클래스를 정의할 수 있다. 이를 통해 프로그램에서 발생할 수 있는 다양한 예외 상황에 대해 더 세밀하고 구체적인 처리가 가능하다.

3.6. 시간 관련 기능

`` 헤더는 std::chrono::duration, std::chrono::time_point 그리고 시계 같은 시간 요소를 제공한다. 이 헤더는 C++11에서 처음 도입되었으며, C++20에서는 달력 및 시간대 관련 기능이 추가되었다.

3.7. 튜플

cpp
#include
```

`` 헤더는 여러 개의 값을 묶어서 하나의 객체처럼 다룰 수 있게 해주는 튜플 (tuple) 클래스 템플릿 `std::tuple`을 제공한다. 튜플C++11에서 처음 도입되었다.

3.8. 기타 유틸리티

`` 헤더는 객체 쌍(2 멤버 튜플)을 다루는 템플릿 클래스 `std::pair`와, `std::move`, `std::forward` 등 다양한 유틸리티 기능들을 제공한다. `` 헤더는 C++11부터 형식 정보를 다루는 기능을 제공하며, 메타 프로그래밍에 사용된다.

비교 연산자를 자동 생성하는 `std::rel_ops` 네임스페이스는 새로운 기본 비교 연산자를 선호하여 C++20에서 더 이상 사용되지 않는다.

4. 문자열

C++ 표준 라이브러리에서 문자열 조작에 사용되는 구성 요소는 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
<string>C++ 표준 문자열 클래스와 템플릿을 제공한다.
<string_view>C++17에 추가됨. 불변이며 소유하지 않는 문자열 뷰인 클래스 템플릿 `std::basic_string_view`를 제공한다.
<regex>C++11에 추가됨. 정규 표현식을 사용하여 문자열 패턴 매칭을 위한 유틸리티를 제공한다.

5. 스트림과 입출력

iostream영어 헤더는 표준 입출력 스트림 (cin, cout, cerr, clog)을 제공한다. fstream영어 헤더는 파일 입출력을 위한 기능을 제공한다. sstream영어 헤더는 문자열 기반 입출력을 위한 기능을 제공한다. iomanip영어 헤더는 입출력 조작(formatting)을 위한 기능을 제공한다.

C++ 프로그램이 입출력 및 파일 조작에 사용할 수 있는 구성 요소는 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
fstream파일 기반 입출력을 위한 기능을 제공한다.
iomanip정수 형식 지정 시 사용되는 기수 및 정밀도와 같은 출력 형식 지정을 조작하는 기능을 제공한다.
iosiostream 작동의 기본이 되는 여러 유형과 함수를 제공한다.
iosfwd여러 I/O 관련 클래스 템플릿의 전방 선언을 제공한다.
iostreamC++ 입출력 기본 사항을 제공한다.
istream입력에 대한 `std::istream` 및 기타 지원 클래스를 제공한다.
ostream출력에 대한 `std::ostream` 및 기타 지원 클래스를 제공한다.
sstream문자열 조작을 위한 `std::stringstream` 및 기타 지원 클래스를 제공한다.
streambuf외부 파일 또는 문자열과 같은 특정 유형의 문자 시퀀스에서 읽기 및 쓰기 기능을 제공한다.

6. 수치 처리

C++ 프로그램에서 준수치 연산을 수행하기 위해 사용할 수 있는 구성 요소는 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
<complex>복소수를 표현하고 다루기 위한 `std::complex` 클래스 템플릿과 여러 함수를 정의한다.
<random>C++11에 추가되었으며, (의사) 난수 및 분포를 생성하기 위한 기능을 제공한다.
<valarray>값 배열을 표현하고 조작하는 데 사용되는 5개의 클래스 템플릿(`std::valarray`, `std::slice_array`, `std::gslice_array`, `std::mask_array`, `std::indirect_array`), 두 개의 클래스(`std::slice` 및 `std::gslice`) 및 관련 함수를 정의한다.
<numeric>일반화된 수치 연산을 제공한다.

7. 스레드 지원

C++11부터 멀티스레딩 프로그래밍을 위한 기능들이 표준 라이브러리에 추가되었다.

* `<thread>` 헤더는 스레드 생성 및 관리를 위한 기능을 제공한다.
* `<mutex>`, `<shared_mutex>` 헤더는 스레드 동기화를 위한 뮤텍스를 제공한다.
* `<condition_variable>` 헤더는 조건 변수를 제공한다.
* `<future>` 헤더는 비동기 작업의 결과를 얻기 위한 기능을 제공한다.
* `<atomic>` 헤더는 원자적 연산을 제공한다.

👆
좌우로 밀어서 보기
헤더 파일설명
<atomic>C++11에 추가됨. 원자적 연산을 제공한다.
<condition_variable>C++11에 추가됨. 조건 변수를 제공한다.
<future>C++11에 추가됨. 비동기 작업의 결과를 얻기 위한 기능을 제공한다. (32.9.1-1항)
<mutex>C++11에 추가됨. 상호 배제 메커니즘(뮤텍스, 락, 콜 원스)을 제공한다. (32.5-1항)
<shared_mutex>C++14에 추가됨. 공유 상호 배제를 위한 기능을 제공한다.
<thread>C++11에 추가됨. 스레드 작업을 위한 클래스 및 네임스페이스를 제공한다.

8. C 표준 라이브러리

C++ 표준 라이브러리는 C 표준 라이브러리의 기능들을 포함하고 있다. C 표준 라이브러리의 헤더들은 `.h` 확장자를 제거하고 앞에 'c'를 붙인 형태로 제공된다 (예: ``, ``). C 표준 라이브러리의 기능들은 `std` 네임스페이스 안에 위치한다. ISO C에서는 표준 라이브러리 함수를 매크로로 구현할 수 있지만, ISO C++에서는 허용되지 않는다.

C++에서는 C 표준 라이브러리의 헤더를 사용할 때, C++ 명명 규칙에 따라 헤더 이름 끝에서 `.h`를 제거하고 앞에 `c`를 붙인다. 예를 들어 `time.h`는 `ctime`이 된다. 또한, 이 헤더들 안에 선언된 함수나 자료형은 `std` 네임스페이스 안에 위치하므로, 사용할 때 `std::`를 붙여서 구분한다. (단, 네임스페이스의 영향을 받지 않는 매크로는 예외)

👆
좌우로 밀어서 보기
C 헤더C++ 헤더설명
````프로그램 디버깅 시 논리적 오류 및 기타 유형의 버그를 감지하는 데 사용되는 assert 매크로를 선언.
````복소수를 조작하기 위한 함수 집합을 정의. C++17에서 사용이 중단되었고 C++20에서 제거됨.
````사용된 문자 집합에 관계없이 문자를 해당 유형별로 분류하거나 대소문자를 변환하는 데 사용되는 함수 집합을 정의.
````라이브러리 함수에서 보고하는 오류 코드를 테스트하기 위한 것.
````부동 소수점 환경을 제어하기 위한 함수 집합을 정의.
````부동 소수점 라이브러리의 구현별 속성을 지정하는 매크로 상수를 정의.
````정확한 너비의 정수 유형을 정의.
````여러 표준 토큰을 표현하는 대체 방법을 구현하는 몇 가지 매크로를 정의. ISO 646 변형 문자 집합으로 프로그래밍하기 위한 것. C++20에서 제거됨.
````정수 유형의 구현별 속성을 지정하는 매크로 상수를 정의.
````지역화 함수를 정의.
````일반적인 수학 함수를 정의. 베셀 함수리만 제타 함수와 같은 특수 수학 함수를 포함하는 ``를 확장.
````비지역 탈출에 사용되는 매크로 `setjmp` 및 `longjmp`를 선언.
````시그널 처리 함수를 정의.
````객체의 정렬을 쿼리하고 지정하기 위한 것. C++17에서 사용이 중단되었고 C++20에서 제거됨.
````가변 인자 함수를 작성하는 데 사용.
````부울 데이터 유형을 정의. C++17에서 사용이 중단되었고 C++20에서 제거됨.
````몇 가지 유용한 유형 및 매크로를 정의.
````정확한 너비의 정수 유형을 정의.
````핵심 입력 및 출력 함수를 정의.
````숫자 변환, 의사 난수 생성, 메모리 할당, 프로세스 제어 등의 함수를 정의.
````문자열 처리 함수를 정의.
````유형 제네릭 수학 함수를 정의. C++17에서 사용이 중단되었고 C++20에서 제거됨.
````날짜 및 시간 처리 함수를 정의.
````유니코드 문자를 조작하기 위한 유형 및 함수.
````와이드 문자열 처리 함수를 정의.
````와이드 문자를 해당 유형별로 분류하거나 대소문자를 변환하는 데 사용되는 함수 집합을 정의.


다음은 C++ 명명 규칙이 없는 특수한 C 호환성 헤더이다. 이 헤더가 필요한 경우 C 헤더를 사용해야 한다.

👆
좌우로 밀어서 보기
C 헤더설명
``C++23에 추가됨. 스레드 간에 공유되는 데이터에 대한 원자적 연산을 위한 것.


`stdnoreturn.h` 및 `threads.h` C 헤더는 C++에 해당하는 항목이 없으며 C++에서 지원되지 않는다.

9. C++20 이후의 새로운 기능

C++ 표준은 1990년대 C++ ISO 표준화 노력의 일환으로 ISO 표준화를 거쳤으며, 2011년 이후 3년마다 확장 및 업데이트되고 있다. C++20, C++23 등에서 새로운 기능들이 지속적으로 추가되고 있다.

C++20에서는 모듈이 도입되었고, C++23부터는 C++ 표준 라이브러리를 모듈을 사용하여 가져올 수 있게 되었다. C++ 표준은 `std` 및 `std.*`를 모듈 이름으로 예약했다.

C++23 현재 표준에서 정의된 표준 라이브러리 모듈은 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
`std`C 라이브러리 기능을 포함하여 가져올 수 있는 C++ 라이브러리 헤더에서 제공하는 `std` 네임스페이스 및 전역 저장소 할당 및 해제 함수에 있는 모든 선언을 내보낸다(표준 네임스페이스에 선언되어 있지만).
`std.compat``std` 모듈과 동일한 선언을 내보내고, C 라이브러리 기능에서 전역 네임스페이스의 함수를 추가로 내보낸다. 이름에 "compat"이 포함되어 있어 C와의 호환성을 의미한다.


C와의 상호 운용성을 위해, ".h"로 끝나는 ISO C 표준 라이브러리 헤더는 C++23에서 더 이상 사용 중단되지 않는다.

표준 라이브러리의 다른 하위 집합을 제공하는 추가 모듈을 추가하는 것이 제안되었으며, 이는 향후 개정에 포함될 수 있다. 제안된 모듈은 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
`std.fundamental`C++ 표준 라이브러리 내의 유틸리티 기능을 내보낸다.
`std.core``std.fundamental`의 모든 항목과 컨테이너 기능 및 표준 템플릿 라이브러리(STL), 그리고 문자열, 정규 표현식, 스마트 포인터와 같은 다른 데이터 형식을 내보낸다.
`std.io`입출력 기능을 내보낸다.
`std.os`운영 체제와 인터페이스하기 위한 기능을 내보낸다.
`std.concurrency`동시 프로그래밍을 위한 기능을 내보낸다.
`std.math`수학 및 의사 난수 생성 기능을 내보낸다.


C++ 프로그램이 기능을 향상시키기 위해 사용할 수 있는 구성 요소는 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
``C++17에 추가됨. 형식 지움 클래스 `std::any`를 제공한다.
``C++11에 추가됨. 클래스 템플릿 `std::atomic`와 여러 템플릿 특수화 및 더 많은 원자 연산을 제공한다.
```std::chrono::duration`, `std::chrono::time_point` 및 클럭과 같은 시간 요소를 제공한다. C++20부터 달력, 시간대, 더 많은 클럭 및 문자열 시계열 형식 지정과 같은 상당한 양의 시간적 기능이 추가되었다.
``C++20에 추가됨. 기본적인 라이브러리 개념을 제공한다.
``C++23에 추가됨. 클래스 템플릿 `std::expected`를 통해 결과 유형을 제공한다.
``표준 알고리즘과 함께 사용하도록 설계된 여러 함수 객체를 제공한다.
``C++23에 추가됨. 범위에서 중첩된 yield 연산을 추가로 지원하는 코루틴 제너레이터를 제공한다.
```std::unique_ptr` 클래스 템플릿을 포함하여 C++의 메모리 관리 기능을 제공한다.
``C++17에 추가됨. 런타임에 동작을 변경할 수 있는 다형성 메모리 할당자를 만드는 기능을 제공한다.
``C++17에 추가됨. 클래스 템플릿 `std::optional`를 통해 선택적 유형을 제공한다.
``C++11에 추가됨. `std::scoped_allocator_adaptor`를 제공한다.
``C++23에 추가됨. 스택 추적 연산을 제공한다.
```std::logic_error` 및 `std::runtime_error`와 같은 표준 예외 클래스를 포함하며, 둘 다 `std::exception`에서 파생된다.
``C++11에 추가됨. `std::error_code`를 정의한다.
``C++11 및 TR1에 추가됨. 클래스 템플릿 `std::tuple`를 통해 튜플을 제공한다.
``C++11에 추가됨. 유형으로 작업하는 메타프로그래밍 기능을 제공한다.
``클래스 템플릿 `std::pair` (두 멤버 튜플), 컴파일 시간 정수 시퀀스, 어휘 유형 구성 도우미, `std::move` 및 `std::forward`와 같은 함수 등 다양한 유틸리티를 제공한다. 비교 연산자를 자동으로 생성하기 위한 `std::rel_ops` 네임스페이스는 새로운 기본 비교 연산자를 선호하여 C++20에서 더 이상 사용되지 않는다.
``C++17에 추가됨. 클래스 템플릿 `std::variant`를 통해 태그된 유니온 유형을 제공한다.


C++ 프로그램 개발 지원에 사용할 수 있는 구성 요소는 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
``C++20에 추가됨. 삼원 비교 연산자 지원을 제공한다.
``C++20에 추가됨. 코루틴 지원을 제공한다.
``C++26에 추가됨. 디버깅 지원을 제공한다.
```std::exception`을 포함하여 예외 처리와 관련된 여러 유형 및 함수를 제공하며, 이는 표준 라이브러리에서 발생한 모든 예외의 기본 클래스이다.
``C++11에 추가됨. 초기화 리스트 지원을 제공한다.
``기본 숫자 형식의 속성을 설명하는 데 사용되는 클래스 템플릿 `std::numeric_limits`를 제공한다.
``C++ 메모리 관리의 기본을 구성하는 연산자 `new` 및 `delete`와 기타 함수 및 유형을 제공한다.
``C++20에 추가됨. `__LINE__`과 같은 미리 정의된 매크로의 대안으로 소스 위치 정보를 캡처하는 기능을 제공한다.
``C++23에 추가됨. 확장된 부동 소수점 형식에 대한 조건부 지원을 제공한다.
``C++ 런타임 형식 정보를 다루는 기능을 제공한다.
``C++20에 추가됨. C++ 표준 라이브러리 구현에 대한 정보를 제공한다.


C++ 프로그램이 지역화 및 문자 인코딩 조작에 사용할 수 있는 구성 요소는 다음과 같다.

👆
좌우로 밀어서 보기
이름설명
``다양한 문자 인코딩에 대한 코드 변환 패싯을 제공한다. C++17부터 더 이상 사용되지 않으며, C++26에서 제거되었다.
``로케일에 특정한 정보를 캡슐화하고 조작하는 클래스를 정의하고 함수를 선언한다.
``C++26에 추가됨. 텍스트 인코딩 식별을 제공한다.

9.1. C++20

C++20 표준에서는 다음과 같은 주요 기능들이 추가되었다.

* : 컴파일 타임에 템플릿 인자를 검증하는 컨셉(Concept) 기능이 추가되었다.
* : 반복자(iterator)를 추상화한 레인지(Range) 라이브러리가 추가되었다.
* : 텍스트 서식(text formatting) 기능을 제공한다.
* : C++11에서 추가된 시간 관련 기능(`std::chrono::duration`, `std::chrono::time_point` 등)에 더해, 달력 및 시간대 관련 기능이 확장되었다.
* : 비트 조작 함수군이 추가되었다.
* : 삼원 비교 연산자(`<=>`) 관련 기능을 제공한다.
* : 코루틴 지원을 위한 형식 및 함수가 추가되었다.
* : 소스 코드 위치 정보(`__LINE__`과 같은 매크로 대체)를 캡처하는 기능을 제공한다.
* : 비동기 작업의 취소 기능을 제공한다.
* : 동기 스트림 기능을 제공한다.
* : C++ 표준 라이브러리 구현에 대한 정보를 제공한다.
* : 수학 상수 (π, e 등)를 제공한다.
* : 래치(latch) 동기화 기능을 제공한다.
* : 세마포어(semaphore) 동기화 기능을 제공한다.
* : 배리어(barrier) 동기화 기능을 제공한다.

9.2. C++23

C++23에 추가된 주요 기능은 다음과 같다.

* `std::expected`: 결과 유형 기능을 제공하는 클래스 템플릿이다.
* `std::generator`: 범위에서 중첩된 yield 연산을 추가로 지원하는 코루틴 제너레이터를 제공한다.
* `std::mdspan`: 다차원 배열 뷰를 제공한다. (요약에는 언급되었으나 원문에 해당 내용이 없어 제외)
* `std::print`: 포맷팅된 출력 유틸리티를 제공한다. (요약에는 언급되었으나 원문에 해당 내용이 없어 제외)
* `std::spanstream`: 고정 문자 버퍼 입출력 스트림을 제공한다. (요약에는 언급되었으나 원문에 해당 내용이 없어 제외)
* `std::stdfloat`: 확장 부동 소수점 형식에 대한 조건부 지원을 제공한다.
* `flat_map`, `flat_set`: 플랫 맵/셋 컨테이너를 제공한다. (요약에는 언급되었으나 원문에 해당 내용이 없어 제외)
* `std::to_underlying`: 열거형 기본 형식 변환 유틸리티를 제공한다. (요약에는 언급되었으나 원문에 해당 내용이 없어 제외)
* `std::byteswap`: 바이트 순서 변환 함수를 제공한다. (요약에는 언급되었으나 원문에 해당 내용이 없어 제외)
* `stacktrace`: 스택 추적 연산을 제공한다.

C++23에서는 C++ 표준 라이브러리를 C++20에서 도입된 모듈을 사용하여 가져올 수 있다. 표준 라이브러리 모듈은 `std` 및 `std.compat` 두 가지가 제공된다.

👆
좌우로 밀어서 보기
이름설명
`std`C 라이브러리 기능을 포함하여 가져올 수 있는 C++ 라이브러리 헤더에서 제공하는 `std` 네임스페이스 및 전역 저장소 할당 및 해제 함수에 있는 모든 선언을 내보낸다(표준 네임스페이스에 선언되어 있지만).
`std.compat``std` 모듈과 동일한 선언을 내보내고, C 라이브러리 기능에서 전역 네임스페이스의 함수를 추가로 내보낸다. 이름에 "compat"이 포함되어 있어 C와의 호환성을 의미한다.


C++ 표준은 `std` 및 `std.*`를 모듈 이름으로 예약했다.

C와의 상호 운용성을 위해, ".h"로 끝나는 ISO C 표준 라이브러리 헤더는 C++23에서 더 이상 사용 중단되지 않는다.

9.3. C++26 (예정)

* : 디버깅 지원을 제공한다.
* , : 동시성 관련 기능을 제공한다.
* : 고정 용량 벡터를 제공한다.
* : 선형대수 기능을 제공한다.
* : 데이터 병렬 형식을 제공한다.
* : 텍스트 인코딩 식별을 제공한다.