맨위로가기

C++ 표준 라이브러리

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

1. 개요

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

더 읽어볼만한 페이지

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

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`과 유사하지만, 키의 중복을 허용하는 연관 컨테이너 클래스 템플릿이다. `` 헤더 파일에 정의되어 있다.[1]

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`는 우선순위 큐 컨테이너 어댑터 클래스이다. 저장된 요소들 중 우선순위가 가장 높은 요소가 먼저 반환된다.[1]

2. 5. 4. `std::stack`

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

3. 일반 기능

C++ 표준 라이브러리는 표준 템플릿 라이브러리(STL)의 영향을 받아 만들어졌으며, 컨테이너 외에도 여러 유틸리티 기능을 제공한다.[4][5] 이러한 기능들은 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에 추가됨. 런타임에 동작을 변경할 수 있는 다형성 메모리 할당자를 만드는 기능을 제공한다.[14]
<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++ 표준 라이브러리 구현에 대한 정보를 제공한다.[15]


  • '''함수 객체 ():''' 표준 알고리즘과 함께 사용되는 함수 객체들을 정의한다.
  • '''메모리 관리 ():''' `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

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

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

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

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

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


3. 2. 반복자

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

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

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


3. 3. 함수 객체

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

3. 4. 메모리 관리

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

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

3. 5. 예외 처리

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

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

3. 6. 시간 관련 기능

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

3. 7. 튜플

cpp

#include

```

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

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)을 제공한다.[2] fstream영어 헤더는 파일 입출력을 위한 기능을 제공한다.[2] sstream영어 헤더는 문자열 기반 입출력을 위한 기능을 제공한다.[2] iomanip영어 헤더는 입출력 조작(formatting)을 위한 기능을 제공한다.[2]

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부터 멀티스레딩 프로그래밍을 위한 기능들이 표준 라이브러리에 추가되었다.[8]


  • `<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년마다 확장 및 업데이트되고 있다.[8] C++20, C++23 등에서 새로운 기능들이 지속적으로 추가되고 있다.

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

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

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



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

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

이름설명
`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에 추가됨. 런타임에 동작을 변경할 수 있는 다형성 메모리 할당자를 만드는 기능을 제공한다.[14]
``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++ 표준 라이브러리 구현에 대한 정보를 제공한다.[15]



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

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


9. 1. C++20

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

  • '''''': 컴파일 타임에 템플릿 인자를 검증하는 컨셉(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.*`를 모듈 이름으로 예약했다.[11]

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

9. 3. C++26 (예정)


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

참조

[1] 간행물 Programming Languages – C++
[2] 웹사이트 Clarifying the status of the "C headers" http://www.open-std.[...] 2021-06-11
[3] 간행물 Programming Languages – C++
[4] 서적 The Design and Evolution of C++ §8.5 Addison Wesley
[5] 웹사이트 The Standard Template Library http://www.hpl.hp.co[...] HP Labs 1994-08-01
[6] 웹사이트 Generic Algorithms http://www.cs.rpi.ed[...]
[7] 웹사이트 std::nth_element http://en.cppreferen[...] cppreference.com 2018-03-20
[8] 문서 C++ IS Schedule https://www.open-std[...]
[9] 웹사이트 Apache C++ Standard Library http://stdcxx.apache[...]
[10] 웹사이트 Apache C++ Standard Library and the Attic http://mail-archives[...] stdcxx-dev mailing list 2014-02-27
[11] 간행물 P2465R3 - C++ Modules: Design and Evolution https://www.open-std[...] 2022
[12] 간행물 P0581R1 - Modules for C++ https://www.open-std[...] 2018
[13] 간행물 P2412R0 - Further refinements to the C++ Modules Design https://www.open-std[...] 2021
[14] 웹사이트 Polymorphic Allocators, std::vector Growth and Hacking https://www.bfilipek[...] 2021-04-30
[15] 웹사이트 Working Draft, Standard for Programming Language C++ http://open-std.org/[...] ISO/IEC 2021-04-30
[16] 간행물 Programming Languages — C++
[17] 간행물 Programming Languages — C++
[18] 서적 The Design and Evolution of C++ §8.5 https://archive.org/[...] Addison Wesley
[19] 웹인용 The Standard Template Library http://www.hpl.hp.co[...] HP Labs 1994-08-01
[20] 웹사이트 Generic Algorithms http://www.cs.rpi.ed[...]
[21] 웹사이트 nth_element http://en.cppreferen[...]
[22] 웹인용 JTC1/SC22/WG21 - The C++ Standards Committee http://www.open-std.[...] ISO/IEC



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com