C++ 표준 라이브러리
C++ Standard LibraryC++ 표준 라이브러리 |
---|
용기 |
C표준도서관 |
C++ 프로그래밍 언어에서 C++ 표준 라이브러리는 핵심 언어와 C++ ISO 표준 자체의 일부로 작성된 클래스와 기능의 모음입니다.[1]
개요
C++ 표준 라이브러리는 여러 개의 일반 컨테이너, 이러한 컨테이너를 사용하고 조작하는 기능, 함수 객체, 일반 문자열 및 스트림(대화형 및 파일 I/O 포함), 일부 언어 기능 지원, 숫자의 제곱근 찾기와 같은 일반적인 작업에 대한 기능을 제공합니다. C++ 표준 라이브러리는 또한 .h로 끝나는 ISO C 표준 라이브러리의 대부분의 헤더를 통합하고 있지만, 이들의 사용은 (C[2]++23 이후의 감소를 되돌림) 감소되었습니다.[3] C++23은 대신 이 헤더들을 C와의 상호 운용성에 유용하다고 생각하며, 유효한 C와 C++ 프로그램이 될 것으로 예상되는 프로그램 이외의 프로그램에서는 사용하지 않는 것이 좋습니다. C++ 표준 라이브러리의 다른 헤더는 ".h"로 끝이 나지 않습니다. C++ 표준 라이브러리의 기능은 다음과 같습니다. std
네임스페이스.
C++ 표준 라이브러리는 STL(Standard Template Library)이 도입한 규칙을 기반으로 하며, 알렉산더 스테파노프(Alexander Stepanov)와 멍 리(Meng Lee)와 같은 STL의 일반 프로그래밍 및 개발자에 대한 연구의 영향을 받았습니다.[4][5] C++ 표준 라이브러리와 STL은 많은 기능을 공유하지만 둘 다 다른 기능의 엄격한 수퍼셋이 아닙니다.[citation needed]
C++ 표준 라이브러리의 주목할 만한 특징은 일반 알고리즘의 구문과 의미론을 지정할 뿐만 아니라 성능에 대한 요구 사항을 지정한다는 것입니다.[6] 이러한 성능 요구 사항은 잘 알려진 알고리즘에 해당하는 경우가 많은데, 이 알고리즘은 예상되지만 사용할 필요가 없습니다. 대부분의 경우 선형 시간 O(n) 또는 선형 산술 시간 O(n log n)이 필요하지만, 안정적인 정렬을 위해 준선형 시간 O(n log2 n)과 같이 일부 경우 더 높은 경계가 허용됩니다. 기존에는 정렬이 평균 O(n log n)만 가져가면 돼 실무적으로는 빠르지만 최악의 경우 성능이 떨어지는 퀵 정렬을 사용할 수 있었지만, 빠른 평균 성능과 최적의 최악의 경우 복잡성을 모두 허용하기 위해 인트로소트를 도입했으며, C++11 기준으로 정렬은 최악의 선형 산술을 보장합니다. 다른 경우에는 선택과 같이 요구 사항이 더 느슨하게 유지됩니다. 선택은 평균적으로 선형이어야 하며([7]빠른 선택과 같이), 인트로셀렉트와 같이 최악의 경우 선형이 필요하지 않습니다.
C++ 표준 도서관은 1990년대에 C++ ISO 표준화 작업의 일환으로 ISO 표준화 작업을 거쳤습니다. 2011년부터 C++ 표준을 개정할 때마다 3년마다[8] 확대, 업데이트되었습니다.
구현
이름. | 조직 | 홈페이지 | 머리글자 | 라이선스 | 최신출시 |
---|---|---|---|---|---|
GNU C++ 표준 라이브러리 | GNU 프로젝트 및 자유 소프트웨어 재단 | [1] | libstdc++ | GCC 런타임 라이브러리 예외가 있는 GPLv3 | 연간 1회 신규 대작 출시 |
LLVM C++ 표준 라이브러리 | LLVM 개발자 그룹 | [2] | libc++ | LLVM 예외가 있는 Apache License 2.0 | 2주마다 |
NVIDIA C++ 표준 라이브러리 | 엔비디아 | [3] | libcu++ | LLVM 예외가 있는 Apache License 2.0 | 2022년 10월 12일, | 전
마이크로소프트 C++ 표준 라이브러리 | 마이크로소프트 | [4] | MSVC STL | LLVM 예외가 있는 Apache License 2.0 | 매일 일어나는 |
HPX C++ 병렬 및 동시성 표준 라이브러리 | 스텔라 그룹 | [5] | HPX | 소프트웨어 라이센스 1.0 부스트 | 2022년 8월 6일, | 전
Electronic Arts 표준 템플릿 라이브러리 | 일렉트로닉 아츠 | [6] | EASTL | BSD 3-조항 라이선스 | 2021년 10월 20일, | 전
딩쿰 C++ 라이브러리 | 딩커웨어 | [7] | 알 수 없는 | 상업의 | 알 수 없는 |
크레용 C++ 표준 라이브러리 | 크레용 사용자 그룹 | [8] | 알 수 없는 | 상업의 | 알 수 없는 |
단종
아파치 C++ 표준 라이브러리
Apache C++ 표준 라이브러리는 또 다른 오픈 소스 구현입니다. 이것은 원래 로그 웨이브 소프트웨어에 의해 상업적으로 개발되었고 나중에 아파치 소프트웨어 재단에 기부되었습니다.[9] 그러나 출시되지 않은 채 5년 이상이 지난 후, Apache Software Foundation의 이사회는 이 프로젝트를 종료하고 Apache Attic으로 옮기기로 결정했습니다.[10]
참고 항목
다음 라이브러리들은 C++ 표준 라이브러리의 대부분을 구현합니다.
이름. | 홈페이지 | 묘사 |
---|---|---|
압실 | [9] | Google에서 내부적으로 사용하는 오픈 소스 라이브러리 모음 |
어리석음 | [10] | Facebook에서 광범위하게 사용되는 다양한 C++14 라이브러리 |
베어플랭크 지원 라이브러리 | [11] | 컴파일 시 모든 것을 실행할 수 있는 C++ 라이브러리 |
표준 모듈
모듈이 C++20에 도입된 이후로 C++23까지는 표준 라이브러리 모듈에 대한 지원이 없었습니다. 이러한 명명된 모듈은 글로벌 및 두 가지 모두에 선언된 모든 항목을 포함하도록 추가되었습니다. std
가져올 수 있는 표준 헤더에서 제공하는 이름공간입니다. 매크로는 내보낼 수 없으므로 사용자는 매크로를 내보내는 헤더를 수동으로 포함하거나 가져와야 합니다.
std
- 네임스페이스의 모든 선언을 내보냅니다.
std
C 라이브러리 시설(표준 네임스페이스에 선언되어 있음)을 포함하여 가져올 수 있는 C++ 라이브러리 헤더가 제공하는 글로벌 스토리지 할당 및 할당 해제 기능. std.compat
- 명명된 모듈과 동일한 선언을 내보냅니다.
std
, 또한 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의 새로운 제품입니다. 범위에 대한 중첩 수율 작업을 추가로 지원하는 코루틴 생성기를 제공합니다.
<memory>
- 클래스 템플릿을 포함하여 C++에서 메모리 관리를 위한 기능을 제공합니다.
std::unique_ptr
. <memory_resource>
- C++17의 새로운 제품입니다. 런타임 시 동작이 변경될 수 있는 다형성 메모리 할당기를 생성하기 위한 기능을 제공합니다.[11]
<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
(2인 튜플), 컴파일 시간 정수 시퀀스, 어휘 유형 구성 도우미, 다음과 같은 기능std::move
그리고.std::forward
, 그 외에도. 네임스페이스std::rel_ops
자동으로 비교 연산자를 생성하기 위해 C++20에서는 기본값으로 설정된 새로운 비교 연산자를 선호하여 값이 떨어집니다. <variant>
- C++17의 새로운 제품입니다. 클래스 템플릿을 제공합니다.
std::variant
, 태그가 지정된 조합 유형
언어지원
<compare>
- C++20의 새로운 제품입니다. 3자 비교 작업자 지원을 제공합니다.
<coroutine>
- C++20의 새로운 제품입니다. 코루틴 지지력을 제공합니다.
<exception>
- 다음을 포함하여 예외 처리와 관련된 여러 유형 및 기능을 제공합니다.
std::exception
, 표준 라이브러리에서 제공하는 모든 예외의 기본 클래스 <initializer_list>
- C++11에서 새로운. 초기화자 목록 지원을 제공합니다.
<limits>
- 클래스 템플릿을 제공합니다.
std::numeric_limits
, 기본 숫자 유형의 속성을 설명하는 데 사용됩니다. <new>
- 연산자를 제공합니다.
new
그리고.delete
C++ 메모리 관리의 기본을 구성하는 기타 기능 및 유형. <source_location>
- C++20의 새로운 제품입니다. 다음과 같은 미리 정의된 매크로 대신 원본 위치 정보를 캡처합니다.
__LINE__
. <stdfloat>
- C++23의 새로운 제품입니다. 확장된 부동 소수점 유형을 조건부로 지원합니다.
<typeinfo>
- C++ 런타임 유형 정보로 작업할 수 있는 시설을 제공합니다.
<version>
- C++20의 새로운 제품입니다. C++ 표준 라이브러리 구현에 대한 정보를 제공합니다.[12]
용기
<array>
- C++11 및 TR1의 새로운 기능. 컨테이너 클래스 템플릿을 제공합니다.
std::array
, 일정한 크기의 배열을 위한 용기 <bitset>
- 전문 컨테이너 클래스를 제공합니다.
std::bitset
, 비트 배열 <deque>
- 컨테이너 클래스 템플릿을 제공합니다.
std::deque
, 겹겹이 늘어선 줄 <flat_map>
- C++23의 새로운 제품입니다. 컨테이너 어댑터 클래스 템플릿 제공
std::flat_map
그리고.std::flat_multimap
. <flat_set>
- C++23의 새로운 제품입니다. 컨테이너 어댑터 클래스 템플릿 제공
std::flat_set
그리고.std::flat_multiset
. <forward_list>
- C++11 및 TR1의 새로운 기능. 컨테이너 클래스 템플릿을 제공합니다.
std::forward_list
, 단일 연계 리스트 <list>
- 컨테이너 클래스 템플릿을 제공합니다.
std::list
, 이중으로 연결된 목록 <map>
- 컨테이너 클래스 템플릿을 제공합니다.
std::map
그리고.std::multimap
, 정렬된 연관 배열 및 멀티맵. <mdspan>
- C++23의 새로운 제품입니다. 클래스 템플릿을 제공합니다.
std::mdspan
, 와 비슷한std::span
하지만 시각은 다차원적입니다. <queue>
- 컨테이너 어댑터 클래스를 제공합니다.
std::queue
, 단일 종단 대기열 및std::priority_queue
, 선순위의 줄 <set>
- 컨테이너 클래스 템플릿을 제공합니다.
std::set
그리고.std::multiset
, 분류된 연관 컨테이너 또는 세트. <span>
- C++20의 새로운 제품입니다. 클래스 템플릿을 제공합니다.
std::span
, 연속적인 범위를 나타내는 비owning 뷰 <stack>
- 컨테이너 어댑터 클래스를 제공합니다.
std::stack
, 겹겹이 쌓아올린 <unordered_map>
- C++11 및 TR1의 새로운 기능. 컨테이너 클래스 템플릿을 제공합니다.
std::unordered_map
그리고.std::unordered_multimap
, 해시 테이블 <unordered_set>
- C++11 및 TR1의 새로운 기능. 컨테이너 클래스 템플릿을 제공합니다.
std::unordered_set
그리고.std::unordered_multiset
. <vector>
- 컨테이너 클래스 템플릿을 제공합니다.
std::vector
, 다이나믹 어레이
반복기 및 범위
<algorithm>
- 컨테이너 및 기타 범위에 사용할 많은 알고리즘의 정의를 제공합니다.
<execution>
- C++17의 새로운 제품입니다. 병렬화된 알고리즘에 대한 실행 정책을 제공합니다.
<iterator>
- 반복기 작업을 위한 클래스 및 템플릿을 제공합니다.
<numeric>
- 일반화된 숫자 알고리즘.
<ranges>
- C++20의 새로운 제품입니다. 범위 시설과 게으르게 평가된 어댑터를 제공합니다.
현지화
<codecvt>
- 다양한 문자 인코딩을 위한 코드 변환 패싯을 제공합니다. 이 헤더는 C++17 이후로 사용되지 않습니다.
<locale>
- 로케일 고유의 정보를 캡슐화하고 조작하는 클래스를 정의하고 함수를 선언합니다.
<text_encoding>
- C++26에서 새로운. 텍스트 인코딩 식별 정보를 제공합니다.
줄들
<charconv>
- C++17의 새로운 제품입니다. /에서 정수 및 부동 소수점으로 로케일 독립, 비할당 및 비투저 문자열 변환 유틸리티를 제공합니다.
<format>
- C++20의 새로운 제품입니다. 다음을 포함한 문자열을 현대적으로 포맷하는 방법을 제공합니다.
std::format
. <string>
- C++ 표준 문자열 클래스 및 템플릿을 제공합니다.
<string_view>
- C++17의 새로운 제품입니다. 클래스 템플릿을 제공합니다.
std::basic_string_view
, 임의의 문자열에 대한 불변의 owning 뷰 <regex>
- C++11에서 새로운. 정규식을 사용하여 패턴 문자열을 일치시키는 유틸리티를 제공합니다.
스트림, 파일 및 입출력
<filesystem>
- C++17의 새로운 제품입니다. 파일 시스템 작업 및 그 구성 요소를 위한 시설을 제공합니다.
<fstream>
- 파일 기반 입출력을 위한 시설을 제공합니다. fstream.
<iomanip>
- 정수를 포맷할 때 사용되는 베이스 및 부동 소수점 값의 정밀도와 같은 출력 포맷을 조작할 수 있는 기능을 제공합니다.
<ios>
- iostreams 작동에 기본적인 몇 가지 유형과 기능을 제공합니다.
<iosfwd>
- 여러 I/O 관련 클래스 템플릿의 순방향 선언을 제공합니다.
<iostream>
- C++ 입력 및 출력 기본 원리를 제공합니다. 아이오스트림을 봐요.
<istream>
- 제공
std::istream
입력을 위한 기타 지원 클래스. <ostream>
- 제공
std::ostream
그리고 출력을 위한 다른 지원 클래스. <print>
- C++23의 새로운 제품입니다. 다음과 같은 포맷된 출력 유틸리티를 제공합니다.
std::print
C 및 C++ 스트림 모두에서 지원됩니다. <spanstream>
- C++23의 새로운 제품입니다. 제공
std::spanstream
기타 고정 문자 버퍼 I/O 스트림. <sstream>
- 제공
std::stringstream
스트링 조작을 위한 다른 지원 클래스. <streambuf>
- 외부 파일 또는 문자열과 같은 특정 유형의 문자 시퀀스에 대한 읽기 및 쓰기 기능을 제공합니다.
<syncstream>
- C++20의 새로운 제품입니다. 제공
std::osyncstream
동기화된 출력 스트림을 위한 다른 지원 클래스.
스레드 지원 라이브러리
<barrier>
- C++20의 새로운 제품입니다. 제공
std::barrier
, 재사용 가능한 실막이 <condition_variable>
- C++11에서 새로운. 32.6-1에서 조건 변수는 일부 조건이 충족되거나 시스템 시간에 도달할 때까지 스레드를 차단하는 데 사용되는 동기화 프리미티브를 제공합니다.
<future>
- C++11에서 새로운. 32.9.1-1에서는 C++ 프로그램이 동일한 스레드 또는 다른 스레드에서 실행된 함수의 결과(값 또는 예외)를 한 스레드에서 검색하는 데 사용할 수 있는 구성 요소에 대해 설명합니다.
<hazard_pointer>
- C++26에서 새로운. 제공합니다.
<latch>
- C++20의 새로운 제품입니다. 제공
std::latch
, 일회용 실막이 <mutex>
- C++11에서 새로운. 32.5-1에서 이 섹션은 뮤트크세스, 잠금, 통화 1회 등 상호 제외 메커니즘을 제공합니다.
<rcu>
- C++26에서 새로운. 읽기-복사-업데이트 메커니즘을 제공합니다.
<shared_mutex>
- C++14의 새로운 제품입니다. 공유 상호 배제를 위한 시설을 제공합니다.
<semaphore>
- C++20의 새로운 제품입니다. 음수가 아닌 리소스 카운트를 모델링하는 세마포어를 제공합니다.
<stop_token>
- C++20의 새로운 제품입니다. 32.3.1-1에서 이 섹션에서는 일반적으로 더 이상 결과가 필요하지 않기 때문에 작업이 적시에 실행을 중지하도록 비동기적으로 요청하는 데 사용할 수 있는 구성 요소에 대해 설명합니다. 이러한 요청을 중지 요청이라고 합니다.
<thread>
- C++11에서 새로운. 스레드 작업을 위한 클래스 및 네임스페이스를 제공합니다.
수치 라이브러리
C++ 프로그램이 반숫자 작업을 수행하는 데 사용할 수 있는 구성 요소입니다.
<bit>
- C++20의 새로운 제품입니다. 비트 조작 기능을 제공합니다.
<complex>
- 클래스 템플릿을 정의합니다.
std::complex
, 그리고 복잡한 숫자를 표현하고 조작하기 위한 수많은 기능들. <numbers>
- C++20의 새로운 제품입니다. 네임스페이스에 정의된 수학 상수를 제공합니다.
std::numbers
. <random>
- C++11에서 새로운. (유사) 난수 및 분포를 생성하기 위한 시설입니다.
<ratio>
- C++11에서 새로운. 클래스 템플릿을 기반으로 컴파일 시간 합리적인 산술을 제공합니다.
<valarray>
- 5개의 클래스 템플릿을 정의합니다(
std::valarray
,std::slice_array
,std::gslice_array
,std::mask_array
,그리고.std::indirect_array
), 2개 클래스()std::slice
그리고.std::gslice
) 및 값의 배열을 표현하고 조작하기 위한 일련의 관련 함수 템플릿.
C표준도서관
C 표준 라이브러리의 각 헤더는 다른 이름으로 C++ 표준 라이브러리에 포함되며 .h를 제거하고 시작 부분에 'c'를 추가하여 생성됩니다. 예를 들어, 'time'입니다.h'는 'ctime'이 됩니다. 이러한 헤더와 기존의 C Standard Library 헤더의 유일한 차이점은 기능을 가능한 한 std::
네임스페이스. ISO C에서는 표준 라이브러리의 기능을 매크로로 구현하는 것이 허용되지만 ISO C++에서는 이를 허용하지 않습니다.
참고 항목
참고문헌
- ^ ISO/IEC 14882:2003 (E) 프로그래밍 언어 – C++ §17-27
- ^ Thomas Köppe (11 June 2021). "Clarifying the status of the "C headers"".
- ^ ISO/IEC 14882:2003(E) 프로그래밍 언어 – C++ §D.5
- ^ Bjarne Stroustrup (1994). The Design and Evolution of C++ §8.5. Addison Wesley. ISBN 0-201-54330-3.
- ^ Alexander Stepanov, Meng Lee (1 August 1994). "The Standard Template Library". HP Labs. Retrieved 22 October 2017.
- ^ "일반 알고리즘", 데이비드 머서
- ^ "std::nth_element". cppreference.com. Retrieved 20 March 2018.
- ^ "C++ IS Schedule", 허브 서터
- ^ 아파치 C++ 표준 라이브러리
- ^ Brett Porter (18 July 2013). "Apache C++ Standard Library and the Attic". stdcxx-dev mailing list. Retrieved 27 February 2014.
- ^ Filipek, Bartlomiej. "Polymorphic Allocators, std::vector Growth and Hacking". Retrieved 30 April 2021.
- ^ "Working Draft, Standard for Programming Language C++" (PDF). open-std.org. ISO/IEC. 1 April 2020. p. 492. Archived (PDF) from the original on 27 April 2020. Retrieved 30 April 2021.
더보기
- Stroustrup, Bjarne (2013). The C++ Programming Language. Addison-Wesley. ISBN 978-0321563842.
- Josuttis, Nicolai (2012). The C++ Standard Library – A Tutorial and Reference. Addison-Wesley. ISBN 978-0-321-62321-8.
- Van Weert, Peter; Gregoire, Marc (14 June 2016). C++ Standard Library Quick Reference. Apress. ISBN 978-1484218754. Archived from the original on 16 May 2021. Retrieved 24 March 2017.
외부 링크
- C++ 표준 라이브러리 참조
- Microsoft C++ 표준 라이브러리 참조
- Rogue Wave SourcePro C++ 설명서
- Apache C++ 표준 라이브러리 위키, 2014년 5월 15일 은퇴 (Rogue Wave C++ 표준 라이브러리 4.1.0 기반)
- STLport C++ 표준 라이브러리 설명서
- GNU C++ 라이브러리 온라인 설명서
- LLVM/Clang C++ 표준 라이브러리 설명서