C++ 표준 라이브러리

C++ Standard Library

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일, 14개월(2022-10-12)
마이크로소프트 C++ 표준 라이브러리 마이크로소프트 [4] MSVC STL LLVM 예외가 있는 Apache License 2.0 매일 일어나는
HPX C++ 병렬 및 동시성 표준 라이브러리 스텔라 그룹 [5] HPX 소프트웨어 라이센스 1.0 부스트 2022년 8월 6일, 16개월(2022-08-06)
Electronic Arts 표준 템플릿 라이브러리 일렉트로닉 아츠 [6] EASTL BSD 3-조항 라이선스 2021년 10월 20일, 2년(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++11TR1의 새로운 기능. 컨테이너 클래스 템플릿을 제공합니다. 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++11TR1의 새로운 기능. 컨테이너 클래스 템플릿을 제공합니다. 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++11TR1의 새로운 기능. 컨테이너 클래스 템플릿을 제공합니다. std::unordered_map 그리고. std::unordered_multimap, 해시 테이블
<unordered_set>
C++11TR1의 새로운 기능. 컨테이너 클래스 템플릿을 제공합니다. 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++에서는 이를 허용하지 않습니다.

참고 항목

참고문헌

  1. ^ ISO/IEC 14882:2003 (E) 프로그래밍 언어 – C++ §17-27
  2. ^ Thomas Köppe (11 June 2021). "Clarifying the status of the "C headers"".
  3. ^ ISO/IEC 14882:2003(E) 프로그래밍 언어 – C++ §D.5
  4. ^ Bjarne Stroustrup (1994). The Design and Evolution of C++ §8.5. Addison Wesley. ISBN 0-201-54330-3.
  5. ^ Alexander Stepanov, Meng Lee (1 August 1994). "The Standard Template Library". HP Labs. Retrieved 22 October 2017.
  6. ^ "일반 알고리즘", 데이비드 머서
  7. ^ "std::nth_element". cppreference.com. Retrieved 20 March 2018.
  8. ^ "C++ IS Schedule", 허브 서터
  9. ^ 아파치 C++ 표준 라이브러리
  10. ^ Brett Porter (18 July 2013). "Apache C++ Standard Library and the Attic". stdcxx-dev mailing list. Retrieved 27 February 2014.
  11. ^ Filipek, Bartlomiej. "Polymorphic Allocators, std::vector Growth and Hacking". Retrieved 30 April 2021.
  12. ^ "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.

더보기

외부 링크