15 분 소요

모던 C++ STL은 모던 C++의 변경에 맞춰 다음의 라이브러리들이 모두 개선되고 추가되었습니다.(모던 C++의 변경 내용은
[모던 C++] 주요 구성 요소 미리보기(C++11, C++14, C++17, C++20)를 참고하시기 바랍니다.
)

언어 지원 라이브러리, 메모리 관리 라이브러리, 유틸리티 라이브러리, 컨테이너 라이브러리, 이터레이터 라이브러리, 알고리즘 라이브러리, 문자열 라이브러리, 숫자 라이브러리, 입출력 라이브러리, 현지화 라이브러리, 진단 라이브러리 등이 모두 개선되었고,

메타 프로그래밍 라이브러리, 동시성 라이브러리, 정규 표현식 라이브러리, 파일 시스템 라이브러리, 컨셉 라이브러리, 포맷팅 라이브러리, 범위 라이브러리가 추가되었습니다.

  1. C++11

    템플릿 메타 프로그래밍(type_traits, ratio), 스마트 포인터(unique_ptr, shared_ptr, weak_ptr), 우측값 참조와 이동 연산(move(), forward()), 중괄호 초기화 지원(initializer_list), 유틸리티(tuple), 래퍼(function, mem_fn(), reference_wrapper, ref(), cref()), 바인더(bind()), 컨테이너(array, forward_list, unordered_map, unordered_multimap, unordered_set, unordered_multiset), 문자열(u16string, u32string), 정규 표현식(regex_match(), regex_search(), regex_replace()), 동시성(thread, mutex, lock_guard, unique_lock, call_once(), condition_variable, atomic, promise, future, packaged_task, async()), chrono등 주요한 항목들이 추가되었고,

    그외에 참조 타입 표현식(declval()), 해시(hash()), 난수 생성기 등이 추가되었습니다.

  2. C++14

    스마트 포인터 유틸리티(make_unique()), tuple의 타입 기반 get(), exchange(), 표준 사용자 정의 리터럴, 연관 컨테이너의 이종 탐색등 기존 항목들을 보강하였고,

    컴파일 타임 정수 타입 시퀀스(integer_sequence), 이터레이터 접근 유틸리티(rbegin(), rend(), cbegin(), cend(), crbegin(), crend()), 쓰레드 소유권 공유(shared_timed_mutex, shared_lock), quoted() 등이 추가되었습니다.

  3. C++17

    신규 타입(optional, any, variant), string_view, 파일 시스템 라이브러리가 추가되었고, 병렬 알고리즘과 실행 정책, 메모리 관리 개선(polymorphic_allocator와 메모리 리소스, uninitialized_default_construct(), destroy() 등, shared_ptr에서 배열 지원, launder())으로 기존 항목들이 보강되었으며,

    tuple개선(apply(), make_from_tuple()), 문자열 유틸리티(문자열 검색기, 숫자/문자열 변환), 알고리즘 개선(gcd(), lcm(), reduce() 등 수학 작업, sample(), clamp(), 특수 수학 함수), 동기화 개선(shared_mutex, scoped_lock), 함수 래퍼 및 함수자(invoke(), not_fn()), 기본타입(byte), 타입 변환(as_const()), 새로운 타입 특성(bool_constant, is_aggregate, is_swappable 등), 연관 컨테이너 함수(insert_or_assign(), try_emplace(), extract(), merge()), 이터레이터 접근 유틸리티(size(), empty(), data()), chrono 라이브러리 개체 함수(floor(), ceil(), round(), abs())등이 추가 되었습니다.

  4. C++20

    C++20의 핵심 기능인 concepts, coroutine, 범위(Range)관련 유틸리티들이 추가되었고, 삼중 비교를 지원하며, constexpr지원이 개선(알고리즘, 컨테이너 멤버 함수, vector와 string, 유틸리티, complex)되었고, chrono가 개선(hh_mm_ss, Calendar, Time Zone)되었으며, 포맷팅 라이브러리(format(), format_to(), format_to_n())가 추가되었습니다.

    또한 동시성 관련하여, atomic이 보강(atomic_ref, notify_one(), notify_all(), wait())되었으며, counting_semaphore, binary_semaphore, latch, barrier, jthread, 쓰레드 중지, 동기화 출력이 추가되었습니다.

    그외에, u8string, 컨테이너 편의성 강화(span, to_array(), erase(), erase_if(), contains()), 수학 기능 개선(cmp_equal(), cmp_not_equal(), cmp_less(), cmp_greater(), cmp_less_equal(), cmp_greater_equal(), in_range(), midpoint(), lerp(), 수학 상수, 비트 조작), 타입 특성(is_constant_evaluated(), is_bounded_array, is_unbounded_array, remove_cvref, common_reference, basic_common_reference), bind_front(), source_location, STL 지원 테스트가 추가되었습니다.

언어 지원 라이브러리

항목 내용
기본 타입 size_t, ptrdiff_f, NULL 등 기본 타입을 제공합니다.

(C++11~)
nullptr_t가 추가되었습니다.
lldiv_t, lldiv_t, imaxdiv_t, float_t, double_t가 추가되었습니다.
고정 너비 정수 타입이 추가되었습니다.

(C++17~)
byte가 추가되어 순수한 1byte 고정 크기를 처리할 수 있습니다.(char, unsigned char는 문자 처리 의미가 포함된 타입입니다.)

(C++23~)
고정 너비 실수 타입이 추가되었습니다.
타입 최대/최소값 numeric_limits를 이용하여 타입의 최대, 최소값을 알 수 있습니다.

(C++11~)
LLONG_MIN, LLONG_MAX가 추가되었습니다.
런타임 타입 type_info를 이용하여 개체의 타입 정보를 알 수 있습니다.

(C++11~)
type_index가 추가되어 type_info컨테이너에서 관리할 수 있습니다.
initializer_list (C++11~) (C++11~)
initializer_list가 추가되어 vector컨테이너의 초기 요소 추가가 간편해 졌습니다.
프로그램 지원 abort(), exit()등 프로그램 종료 관련 함수들과 시그널 처리 함수를 제공합니다.

(C++11~)
quick_exit(), _Exit(), at_quick_exit()가 추가되었습니다.
표준 사용자 정의 리터럴 (C++14~) (C++14~)
표준 사용자 정의 리터럴이 추가되어 operator ""s, operator ""min, operator ""if, 등 문자열, 날짜 / 시간, 복소수 관련 표현이 간편해 졌습니다.

(C++17~)
operator ““sv가 추가되어 string_view 표현이 간편해 졌습니다.

(C++20~)
operator ““y, operator ““d가 추가되어 year, day 표현이 간편해 졌습니다.
source_location (C++20~) (C++20~)
source_location이 추가되어 파일명, 줄번호, 칼럼번호, 함수명등의 정보를 제공합니다.
삼중 비교 (C++20~) (C++20~)
삼중 비교 관련 유틸리티들이 추가되었습니다.
coroutine (C++20~) (C++20~)
coroutine_handle 이 추가되어 코루틴을 재개하는 코루틴 핸들을 제공합니다.
suspend_always, suspend_never가 추가되어 코루틴에서 사용하는 대기 가능 개체를 제공합니다.
coroutine_traits가 추가되어 코루틴 개체종속 타입promise_type을 외부에서 연결해 줄 수 있습니다.
STL 지원 테스트 (C++20~) (C++20~)
STL 지원 테스트 매크로가 추가되어 C++11부터 추가된 STL 기능을 지원하는지 테스트 할 수 있습니다.

메타 프로그래밍 라이브러리 (C++11~)

항목 내용
타입 특성(type_traits) (C++11~) (C++11~)
type_traits이 추가되어 컴파일 타임 프로그래밍시 각 타입의 조건들을 검사하거나 타입 변환등의 작업이 간편해 졌습니다.

(C++14~)
is_null_pointer, is_final이 추가되었습니다.

(C++17~)
bool_constant, has_unique_object_representations, is_aggregate, is_swappable, is_invocable, invoke_result, void_t, type_identity, conjunction, disjunction, negation이 추가되었습니다.

(C++20~)
is_constant_evaluated()가 추가되어 constexpr 함수가 컴파일 타임 함수인지 런타임 함수인지 검사할 수 있습니다.
is_bounded_array, is_unbounded_array가 추가되었습니다.
remove_cvref, common_reference, basic_common_reference가 추가되었습니다.
is_nothrow_convertible, is_layout_compatible, is_pointer_interconvertible_base_of가 추가되었습니다.
ratio (C++11~) (C++11~)
ratio가 추가되어 소수점 오차없이 유리 분수를 표현할 수 있습니다. 분자와 분모를 따로 저장하여 유리 분수를 표현하며, 유틸리티들을 이용하여 컴파일 타임 유리수(정수와 분수) 연산을 지원합니다.
integer_sequence (C++14~) (C++14~)
integer_sequence가 추가되어 컴파일 타임에 정수 타입의 시퀀스를 만들 수 있습니다.

컨셉 라이브러리 (C++20~)

항목 내용
핵심 언어 컨셉 (C++20~) (C++20~)
same_as, derived_from, convertible_to, integral, floating_point, assignable_from, swappable, destructible, constructible_from, default_initializable, move_constructible, copy_constructible등이 추가되었습니다.
비교 컨셉 (C++20~) (C++20~)
equality_comparable, three_way_comparable등이 추가되었습니다.
개체 컨셉 (C++20~) (C++20~)
movable, copyable, semiregular, regular등이 추가되었습니다.
함수자 컨셉 (C++20~) (C++20~)
invocable, predicate등이 추가되었습니다.
이터레이터 컨셉 (C++20~) (C++20~)
forward_iterator, predicate, bidirectional_iterator, random_access_iterator등이 추가되었습니다.
범위(Range) 컨셉 (C++20~) (C++20~)
ranges::forward_range, ranges::bidirectional_range, ranges::random_access_range등이 추가되었습니다.
유틸리티 컨셉 (C++20~) (C++20~)
유틸리티 컨셉이 추가되었습니다.

메모리 관리 라이브러리

항목 내용
C스타일 메모리 관리 malloc(), free()등 C스타일 메모리 할당/해제 함수를 제공합니다.

(C++17~)
aligned_alloc()이 추가되어 정렬된 메모리를 할당할 수 있습니다.
저수준 메모리 관리 operator new, operator delete, set_new_handler()등 C++ 스타일의 메모리 할당/해제시 제어하는 방법을 제공합니다.

(C++11~)
get_new_handler()가 추가되었습니다.

(C++17~)
align_val_t가 추가되었습니다.
launder()가 추가되어 위치 지정 생성으로 생성된 개체의 합법적인 포인터를 얻을 수 있습니다.

(C++20~)
destroying_delete가 추가되었습니다.
할당자 allocator 등 STL에서 개체 할당에 사용합니다.

(C++11~)
allocator_traits, allocator_arg, uses_allocator, scoped_allocator_adaptor가 추가되었습니다.

(C++17~)
polymorphic_allocator가 추가되어 할당시 런타임 다형성을 지원합니다. 메모리 리소스를 사용하여 메모리 풀을 손쉽게 만들 수 있습니다.

(C++20~)
polymorphic_allocatorallocate_bytes(), deallocate_bytes()등이 추가되어 메모리 할당 함수들이 보강되었습니다.
uses_allocator_construction_args, make_obj_using_allocator, uninitialized_construct_using_allocator가 추가되었습니다.
메모리 유틸리티 작업 uninitialized_copy(), uninitialized_fill()등 초기화되지 않은 메모리 관리 작업을 제공합니다.

(C++11~)
uninitialized_copy_n이 추가되었습니다.

(C++17~)
uninitialized_move(), uninitialized_default_construct(), uninitialized_value_construct(), destroy(), destroy_at()가 추가되어 위치 지정 생성자 호출과 소멸자 호출의 새로운 방법을 제공합니다.

(C++20~)
construct_at()이 추가되었습니다.
auto_ptr (~C++11) (C++11~)
auto_ptr배열delete[] 미지원, 좌측값복사 대입 연산시 이동 동작을 하는 등의 사유로 deprecate 되었습니다. 이제 unique_ptr을 사용합니다.
unique_ptr (C++11~) (C++11~)
unique_ptr이 추가되어 소유권 이전용 스마트 포인터를 제공합니다. 기존 auto_ptr을 대체합니다. auto_ptr배열delete[] 미지원, 좌측값복사 대입 연산시 이동 동작을 하는 등의 사유로 deprecate 되었습니다.
default_delete가 추가되어 스마트 포인터의 deleter로 사용할 수 있습니다.

(C++14~)
make_unique()가 추가되어 unique_ptr을 효율적으로 생성할 수 있습니다.
shared_ptr (C++11~) (C++11~)
shared_ptr이 추가되어 소유권 공유용 스마트 포인터를 제공합니다.
enable_shared_from_this가 추가되어 shared_ptr이 관리하는 개체로부터 shared_ptr을 만들 수 있습니다.
owner_less가 추가되어 소유권 개체의 주소로 비교할 수 있습니다.
bad_weak_ptr이 추가되었습니다. shared_ptr에서 포인터가 잘못된 경우 예외를 방출합니다.
make_shared()가 추가되어 shared_ptr을 효율적으로 생성할 수 있습니다.
shared_ptr 형변환(const_pointer_cast(), static_pointer_cast(), dynamic_pointer_cast())가 추가되어 shared_ptr의 관리 개체를 형변환 할 수 있습니다.

(C++17~)
shared_ptr의 배열 지원이 추가되었습니다.
reinterpret_pointer_cast()가 추가되었습니다.

(C++20~)
make_shared()의 배열 지원이 추가되었습니다.
weak_ptr (C++11~) (C++11~)
weak_ptr가 추가되어 shared_ptr상호 참조 문제를 해결합니다.
동적 메모리 관리 (C++11~) (C++11~)
pointer_traits가 추가되어 포인터와 유사한 타입들을 다루는 표준화된 방법을 제공합니다.
addressof()가 추가되어 operator &()연산자 오버로딩 되었어도 실제 주소를 구할 수 있습니다.
align()이 추가되어 메모리 정렬했을 때의 포인터를 구할 수 있습니다.
가비지 컬렉터 지원 (C++11~C++23) (작성중)
초기화 되지 않은 스토리지 (~C++17) (작성중)
메모리 관리 (C++20~) (C++20~)
to_address(), assume_aligned()가 추가되었습니다.
스마트 포인터 어뎁터 (C++23~) (작성중)
명시적 수명 관리 (C++23~) (작성중)

유틸리티 라이브러리

항목 내용
일반 유틸리티 swap() 등을 제공합니다.

(C++14~)
exchange()가 추가되어 주어진 값을 바꾸는 작업이 간편해 졌습니다. 특히 이동 생성자와 이동 대입 연산자 구현에 활용할 수 있습니다.
가변 인자 va_list 등으로 가변 인자를 처리합니다.

(C++11~)
va_copy가 추가되었습니다.
타입 변환 (C++11~) (C++11~)
move()가 추가되어 좌측값을 우측값으로 형변환할 수 있습니다.
move_if_noexcept()가 추가되어 nothrow 보증이 되는 경우에만 &&로 형변환할 수 있습니다.
forward()가 추가되어 함수가 전달받은 인자를 다른 함수로 완벽하게 전달할 수 있습니다.
declval()이 추가되어 참조 타입 표현식으로 변경할 수 있습니다.

(C++17~)
as_const()가 추가되어 인자const를 좀더 간편하게 붙일 수 있습니다.
bitset bitset은 비트 단위의 데이터를 관리하는 개체입니다.
간단한 데이터 개체 pairfirstsecond로 2개의 요소를 관리합니다. make_pair()를 이용하여 pair를 쉽게 생성할 수 있습니다.

(C++11~)
tuple이 추가되어 다수의 요소를 관리할 수 있는 데이터 전달용 개체를 좀 더 간편하게 만들 수 있습니다.
make_tuple(), tie(), forward_as_tuple()이 추가되어 tuple을 쉽게 생성할 수 있습니다.
tuple_cat()이 추가되어 두개의 tuple을 합칠 수 있습니다.
tuple_size가 추가되어 컴파일 타임에 tuple요소 갯수를 구할 수 있습니다.
tuple_element가 추가되어 tuple 각 요소에 대한 타입을 구할 수 있습니다.
piecewise_construct가 추가되어 pair의 개체 생성시 tuple의 요소들로 개체 생성자를 호출할 수 있습니다.

(C++14~)
타입 기반 get()이 추가되어 타입들이 서로 다르다면 타입으로 데이터에 접근할 수 있습니다.

(C++17~)
apply()가 추가되어 tuple 형식을 전달받아 함수자를 호출할 수 있습니다.
make_from_tuple()이 추가되어 tuple 형식을 전달받아 개체를 생성할 수 있습니다.
optional이 추가되어 값이 있을 수도 있고, 없을 수도 있는 데이터를 처리할 수 있어, 미확정 상태, 값을 처리하기 부적절한 상태, 함수 리턴값 성공 여부 처리를 좀더 단순하게 할 수 있습니다.
any가 추가되어 타입의 변동 가능성이 있는 데이터를 비교적 안전하게 사용할 수 있습니다.
variant가 추가되어 타입이 다른 여러 데이터들을 동일한 메모리 공간에서 쉽게 관리할 수 있습니다.

(C++23~)
expected(작성중)
C스타일 시간 유틸리티 time(), clock()등 C스타일 시간 함수를 제공합니다.

(C++17~)
timespec_get(), timespec이 추가되었습니다.
chrono (C++11~) (C++11~)
system_clock, time_point, duration 이 추가되어 좀더 다양한 정확도로 시간을 추적할 수 있습니다.

(C++17~)
floor(), ceil(), round(), abs()가 추가되어 time_pointduration에 반올림 관련 처리를 할 수 있습니다.

(C++20~)
hh_mm_ss가 추가되어 12시간/24시간의 시-분-초 서식 처리가 간편해 졌습니다.
Calendar가 추가되어 년-월-일 서식 처리가 간편해 졌습니다.
Time Zone이 추가되어 특정 지역의 시간대로 시간을 구할 수 있습니다.
is_clock, utc_clock, tai_clock, gps_clock, file_clock, local_t이 추가되었습니다.
from_stream()duration에 추가되었습니다.
days, weeks, month, years가 추가되었습니다.
parse가 추가되었습니다.
함수자 타입 특성 클래스 함수자의 타입 특성으로 사용됩니다.

(C++11~)
unary_function, binary_functiondeprecate 되었습니다.
함수자 equal_to(), less() 등의 비교 연산과 logical_and(), logical_or() 등의 논리 연산과 plus(), minus()등의 산술 연산과 bit_and(), bit_or()등의 비트 연산 함수자들을 제공합니다.

(C++11~)
bit_not이 추가되었습니다.

(C++17~)
문자열 검색기(default_searcher, boyer_moore_searcher, boyer_moore_horspool_searcher)가 추가되어 search()함수자로 사용할 수 있습니다.
부정자 리턴값을 부정합니다.

(C++11~)
not1(), not2()deprecate 되었습니다.

(C++17~)
not_fn()이 추가되었습니다. 인자(단항, 이항 제한이 없습니다.)로 전달한 함수자를 부정하는 함수자를 만듭니다.
함수 래퍼 멤버 함수를 호출할 수 있도록 함수자로 만듭니다.

(C++11~)
mem_fun(), mem_fun_ref(), ptr_fun()deprecate 되었습니다.
function이 추가되어 ()로 호출 가능한 함수자를 저장할 수 있습니다. function에서 ()로 호출할 대상이 없을 때 bad_function_call 예외를 방출합니다.
mem_fn()이 추가되었습니다. 인자가 있는 멤버 함수도 호출하는 함수자를 좀 더 간편하게 만들어 줍니다.

(C++17~)
invoke()가 추가되어 일반 함수와 멤버 함수를 동일한 방식으로 호출할 수 있습니다.

(C++20~)
invoke_r()이 추가되었습니다.
참조 래퍼 (C++11~) (C++11~)
reference_wrapper가 추가되어 복사 생성이나 복사 대입이 안되는 참조자를 래핑할 수 있습니다.
ref(), cref()가 추가되어 reference_wrapper 개체를 좀더 간편하게 생성할 수 있습니다.

(C++20~)
unwrap_reference, unwrap_ref_decay가 추가되었습니다.
바인더 함수 인자값을 고정하여 호출 형태를 변경합니다.

(C++11~)
bind1st(), bind2nd()deprecate 되었습니다.
bind()가 추가되어 placeholders::_1(GCC의 경우 _1, _2, _3, … _29가 정의됨)와 같은 자리 표시자와 조합하여 특정 인자만을 사용하는 함수자를 생성할 수 있습니다.
is_bind_expression가 추가되어 bind()로 생성한 함수인지 검사할 수 있습니다.
is_placeholder가 추가되어 자리 표시자를 사용했는지 검사할 수 있습니다.

(C++20~)
bind_front()가 추가되었습니다. 인자들을 순서대로 배치하므로, 인자의 순서 변경이 없다면 간편하게 사용할 수 있습니다.
hash() (C++11~) (C++11~)
hash()가 추가되어 각 타입별로 데이터의 해시값(Digest)을 구할 수 있습니다.
Identity (C++20~) (작성중)
모호성 해소 (C++17~) (C++17~)
inplace등이 추가되었습니다. 내부 개체를 생성해서 전달하는 것이 아니라, 내부 개체의 생성자 인수들을 전달하면 내부 개체를 직접 생성하라는 의미로 optional, any, variant 생성자에 더미(Dummy) 개체로 사용됩니다.
개체 비교 대소 비교의 논리 조건에 따라 !=, >, <=, >= 연산자를 제공합니다.

(C++20~)
삼중 비교 연산자가 추가되어 !=, >, <=, >=deprecate 되었습니다.
cmp_equal(), cmp_not_equal(), cmp_less(), cmp_greater(), cmp_less_equal(), cmp_greater_equal()이 추가되어 음의 정수와 양의 정수를 정상적으로 비교할 수 있습니다.
in_range()가 추가되었습니다. 주어진 value가 주어진 type의 값 범위 내에 있는지 검사합니다.
constexpr 유틸리티 (C++20~) (C++20~)
유틸리티의 constexpr 지원이 개선되어 swap()함수도 constexpr 함수로 변경되었습니다.

포맷팅 라이브러리 (C++20~)

항목 내용
서식화 함수 (C++20~) (C++20~)
format(), format_to(), format_to_n()이 추가되어 %d, %s 처럼 간편하고, << 처럼 확장성 있는 서식화 방법을 지원합니다.
표준 서식 지정자 (C++20~) (C++20~)
표준 서식 지정자가 추가되어 채움, 정렬, 부호, 너비, 정밀도를 지정할 수 있습니다.
chrono 서식 지정자가 추가되었습니다.
formatter (C++20~) (C++20~)
formatter가 추가되어 특정 타입에 대한 서식을 정의할 수 있습니다.

컨테이너 라이브러리

항목 내용
공통 begin(), end(), rbegin(), rend()로 순방향, 역방향 이터레이터를 제공합니다.

(C++11~)
const_iterator 지원이 강화되어 cbegin(), cend(), crbegin(), crend()가 추가되었고, insert(), erase()등의 멤버 함수에서 사용할 수 있습니다.
컨테이너의 initializer_list 초기화가 추가되어 초기값 입력이 간편해 졌습니다.
emplace() 계열 함수들이 추가되어 요소 삽입시 완벽한 전달을 이용하여 컨테이너 내에서 요소 개체를 직접 생성할 수 있으며, 불필요한 복제본을 생성하지 않습니다.

(C++20~)
컨테이너 멤버 함수의 constexpr 지원이 개선되어 대부분의 멤버 함수들이 constexpr 함수로 변경되었습니다.
vector와 string의 constexpr 지원이 개선되어 vectorstringconstexpr 컨테이너로 변경되었습니다.
erase(), erase_if()가 추가되어 값으로 요소를 삭제할 수 있습니다.
시퀀스 컨테이너 vector, list, queue, stack, deque, priority_queue 를 제공합니다.

(C++11~)
array가 추가되어 기존 C스타일의 배열처럼 연속된 메모리를 사용하는 컨테이너를 제공합니다. C스타일 배열처럼 컴파일 타임에 크기가 결정되어 스택에 할당되므로, 에 할당되는 vector 보다 성능이 좋습니다.
forward_list가 추가되어 단방향 리스트를 제공합니다. 기존 양방향 리스트인 list보다 요소 관리 공간을 작게 차지하며, push_front()로 요소의 앞쪽 방향으로 리스트를 구성합니다.

(C++20~)
to_array()가 추가되어 기존 C스타일 배열로부터 array를 생성할 수 있습니다.
연관 컨테이너 map, multimap, set, multiset을 제공합니다.

(C++11~)
unordered_map, unordered_multimap, unordered_set, unordered_multiset가 추가되어 해시값(Digest)을 사용하는 정렬되지 않은 컨테이너를 제공합니다.

(C++14~)
연관 컨테이너의 이종 탐색을 지원하여 Key와 다른 타입이더라도 탐색이 가능합니다.

(C++17~)
insert_or_assign(), try_emplace(), extract(), merge() 함수가 추가되었습니다.

(C++20~)
contains()가 추가되어 연관 컨테이너에서 주어진 Key가 있는지 검사할 수 있습니다.
span (C++20~) (C++20~)
span이 추가되어 C스타일 배열, array, vector, 메모리, string 등 연속된 메모리 시퀀스를 참조할 수 있습니다.
flat_set
flat_map
flat_multiset
flat_multimap (C++23~)
(작성중)
mdspan (C++23~) (작성중)

이터레이터 라이브러리

항목 내용
이터레이터 기본 요소 iteratoriterator_traits를 제공합니다.
이터레이터 어뎁터 reverse_iterator, back_insert_iterator이터레이터를 래핑한 어뎁터를 제공합니다.

(C++11~)
move_iterator 어뎁터가 추가되어 이터레이터가 가리키는 요소를 이동 연산 할 수 있습니다.
make_move_iterator가 추가되었습니다.

(C++14~)
make_reverse_iterator()가 추가되었습니다.

(C++20~)>
common_iterator, default_sentinel_t, counted_iterator, unreachable_sentinel_t가 추가되었습니다.
스트림 이터레이터 istream_iterator, ostream_iterator 등 스트림 처리를 위한 이터레이터를 제공합니다.
이터레이터 유틸리티 advance(), distance()이터레이터를 이동시킵니다.

(C++11~)
next()prev()가 추가되었습니다.
이터레이터 접근 유틸리티 (C++11~) (C++11~)
begin(), end()가 추가되었습니다.

(C++14~)
rbegin(), rend(), cbegin(), cend(), crbegin(), crend()가 추가되었습니다.

(C++17~)
size(), empty(), data()가 추가되었습니다.

(C++20~)
ssize()가 추가되어 컨테이너의 크기를 부호 있는 signed 타입으로 구할 수 있습니다.
이터레이터 사용자 정의 (C++20~) (작성중)
이터레이터 연관 타입 (C++20~) (작성중)

범위 라이브러리 (C++20~)

항목 내용
범위(Range) (C++20~) (C++20~)
범위(Range)가 추가되어 이터레이팅할 수 있는 추상적인 요소들을 처리할 수 있습니다.
포인트 개체 (C++20~) (C++20~)
ranges::begin, ranges::end등이 추가되어 범위(Range)이터레이터를 구할 수 있습니다.
범위(Range) 알고리즘 (C++20~) (C++20~)
범위(Range) 알고리즘이 추가되어 대부분의 알고리즘에서 범위(Range)를 지원합니다.
뷰(View) (C++20~) (C++20~)
뷰(View)가 추가되어 범위(Range) 요소들을 재배치/필터링한 일종의 범위(Range)를 제공합니다.
미리 정의된 뷰(View)ranges::filter_view, ranges::transform_view, ranges::take_view, elements_view등이 추가되었습니다.
뷰(View) 합성이 추가되어 |로 간소화하여 표현할 수 있습니다.

알고리즘 라이브러리

항목 내용
C스타일 알고리즘 함수 qsort(), bsearch()를 제공합니다.
수정되지 않는 시퀀스 작업 for_each(), find(), search()등 시퀀스를 수정되지 않는 작업입니다.

(C++11~)
all_of(), any_of(), none_of(), find_if_not()이 추가되었습니다.

(C++17~)
for_each_n()이 추가되었습니다.
수정되는 시퀀스 작업 copy(), fill(), transform(), generate(), remove(), replace() 등 시퀀스가 수정되는 작업입니다.

(C++11~)
copy_if(), copy_n(), shuffle()이 추가되었습니다.
move(), move_backward()가 추가되었습니다.

(C++17~)
sample()이 추가되어 시퀀스에서 요소를 랜덤으로 추출할 수 있습니다.

(C++20~)
shift_left(), shift_right()가 추가되었습니다.
분할 작업 partition() 등으로 시퀀스의 요소들을 분할하여 재배치 합니다.

(C++11~)
is_partitioned(), partition_copy(), partition_point()가 추가되었습니다.
정렬 작업 sort(), nth_element() 등으로 시퀀스를 정렬합니다.

(C++11~)
is_sorted(), is_sorted_until()이 추가되었습니다.
이진 검색 작업 lower_bound(), upper_bound(), binary_search() 등으로 검색합니다.
정렬된 범위에서의 작업 merge(), set_union(), set_difference(), set_intersection() 등으로 정렬된 시퀀스를 결합합니다.
최대/최소 작업 min(), max() 등으로 최대/최소값을 구합니다.

(C++11~)
minmax(), minmax_element()가 추가되었습니다.

(C++17~)
clamp()가 추가되어 주어진 값을 최대/최소 범위로 조정할 수 있습니다.
비교 작업 equal(), lexicographical_compare() 등으로 비교합니다.

(C++20~)
lexicographical_compare_three_way()가 추가되었습니다.
순열 작업 next_permutation(), prev_permutation() 등으로 순열(요소들을 중복없이 순서를 변경하여 나열)을 배치합니다.

(C++11~)
is_permutation()이 추가되었습니다.
힙 작업 (작성중)

(C++11~)
is_heap(), is_heap_until()이 추가되었습니다.
수학 작업 accumulate(), inner_product(), partial_sum()과 같은 수학 연산을 제공합니다.

(C++11~)
iota()가 추가되었습니다.

(C++17~)
gcd()가 추가되었습니다. mn의 최대 공약수를 계산합니다.
lcm()이 추가되었습니다. mn의 최소 공배수를 계산합니다.
reduce()가 추가되었습니다. 임의의 순서로 accumulate()를 처리합니다.
transform_reduce()가 추가되었습니다. inner_product()를 병렬로 적용합니다.
inclusive_scan(), exclusive_scan(), transform_inclusive_scan(), transform_exclusive_scan()가 추가되었습니다. partial_sum()을 병렬로 적용합니다.
병렬 알고리즘과 실행 정책 (C++17~) (C++17~)
대부분의 알고리즘에서 병렬 작업을 지원하는 함수 오버로딩 버전이 추가되었습니다. seq, par, par_unseq으로 병렬 실행 정책을 지정할 수 있습니다.

(C++20~)
midpoint()가 추가되었습니다. 중간점인 a + (b - a) / 2를 계산합니다.
lerp()가 추가되었습니다. 선형 보간하여 (a + t(b - a))를 계산합니다.
unseq가 병렬 실행 정책에 추가되었습니다.
constexpr 알고리즘 (C++20~) (C++20~)
알고리즘의 constexpr 지원이 개선되었습니다.

문자열 라이브러리

항목 내용
C스타일 문자열 함수 strcpy(), srlen()널종료 문자열을 지원하는 C스타일 문자열 함수를 제공합니다.

(C++11~)
isblank()가 추가되었습니다.
atoll(), strtoll(), strtoull(), strtoimax(), strtoumax()가 추가되었습니다.
mbrtoc16(), mbrtoc32(), c32rtomb()가 추가되었습니다.
__STDC_UTF_16__, __STDC_UTF_32__가 추가되었습니다.

(C++20~)
mbrtoc8(), c8rtomb()가 추가되었습니다.
문자열 개체 string바이트 문자열을 지원합니다.
wstring와이드 문자열을 지원합니다.

(C++11~)
u16string이 추가되어 UTF-16 인코딩 문자열을 지원합니다.
u32string이 추가되어 UTF-32 인코딩 문자열을 지원합니다.

(C++20~)
u8string이 추가되어 UTF-8 인코딩 문자열을 지원합니다.
starts_with(), ends_with()가 추가되어 접두사와 접미사를 검사할 수 있습니다.
strerror() strerror()errorno(오류 번호 참고)를 문자열로 출력해 줍니다.
숫자 변환 (C++11~) (C++11~)
숫자 변환이 추가되었습니다.
basic_string_view (C++17~) (C++17~)
string_view가 추가되어 문자열을 읽기 전용으로 사용할 때 불필요한 문자열 복제가 없도록 해줍니다.

(C++20)
u8string_view가 추가되었습니다.
숫자/문자열 변환 (C++17~) (C++17~)
to_chars(), from_chars() 함수가 추가되어 숫자와 문자열간의 변환을 제공합니다. 기존 C스타일(atoi(), strtol()등) 보다 안전합니다.
chars_format이 추가되었습니다.

동시성 라이브러리 (C++11~)

항목 내용
thread (C++11~) (C++11~)
thread가 추가되어 주어진 함수자를 쓰레드로 실행시킬 수 있습니다. yield(), sleep_for(), sleep_until()등으로 실행 순서나 속도를 제어할 수 있습니다.
call_once()가 추가되어 주어진 함수자를 여러 쓰레드에서 실행해도 한번만 호출하게 할 수 있습니다.

(C++20~)
jthread가 추가되어 소멸자에서 자동으로 join()을 호출해 줍니다.
stop_token, stop_source, stop_callback가 추가되어 쓰레드를 중지할 수 있습니다.
동기화 개체 (C++11~) (C++11~)
mutex, timed_mutex, recusive_mutex, recusive_timed_mutex등이 추가되어 쓰레드간 경쟁 상태를 해결할 수 있습니다.
lock_guard, unique_lock, lock(), try_lock() 등이 추가되어 mutex의 잠금 상태를 관리할 수 있습니다.

(C++14~)
shared_timed_mutex가 추가되어 mutex의 소유권을 쓰레드끼리 공유할 수 있습니다.
shared_lock이 추가되어 mutex의 소유권을 쓰레드끼리 공유할 수 있습니다.

(C++17~)
shared_mutex가 추가되어 다른 쓰레드들과 공유할 수 있는 lock_shared()를 지원하는 mutex를 만들 수 있습니다. 읽고 쓰는 쓰레드 없이, 자원을 읽기만 할때 유용합니다.
scoped_lock이 추가되었습니다. 다수의 mutex를 사용하더라도 데드락(Dead Lock)을 방지할 수 있게 해줍니다.
atomic (C++11~) (C++11~)
atomic이 추가되어 메모리에서 값을 읽고, 수정하고, 저장하는 작업을 단일 명령 단위로 구성할 수 있습니다.
memory_order가 추가되었습니다. atomic에서 명령을 실행할 때 순차적 일관성 처리 방식을 지정하는 열거형 입니다.

(C++20~)
atomic_ref가 추가되어 참조 타입을 atomic으로 사용할 수 있습니다.
notify_one(), notify_all(), wait()atomic에 추가되어 condition_variable과 같은 인터페이스로 쓰레드 동기화를 구현할 수 있습니다.
test(), notify_one(), notify_all(), wait()atomic_flag에 추가되었습니다.
atomic의 shared_ptr과 weak_ptr의 템플릿 부분 특수화 버전이 추가되었습니다.
atomic 특수화가 추가되었습니다.(float, double, long double)
atomic_signed_lock_free, atomic_unsigned_lock_free가 추가되었습니다.
동기/비동기 처리 (C++11~) (C++11~)
condition_variable이 추가되어 쓰레드간 동기화를 위해 쓰레드를 wait()시킨뒤, 특정 조건이 되었을때 활성화 시킬 수 있습니다.
promise가 추가되어 비동기 처리를 위한 데이터를 저장할 수 있습니다.
future가 추가되어 비동기 함수가 완료될때까지 대기하고, 데이터를 추출할 수 있습니다.
shared_future가 추가되었습니다. 여러곳에서 공유할 수 있는 future 입니다.
packaged_task가 추가되었습니다. promise캡슐화하여 비동기 함수 설정만 하면 되는 유틸리티 개체 입니다.
async()가 추가되었습니다. packaged_task를 쉽게 사용할 수 있도록 만든 유틸리티 함수입니다.

(C++20~)
counting_semaphore, binary_semaphore가 추가되었습니다. 주어진 count만큼 자원을 동시 접근할 수 있는 동기화 개체입니다.
latch가 추가되었습니다. 주어진 count0이 될때까지 대기하는 동기화 개체입니다.
barrier가 추가되었습니다. 주어진 단계가 끝날때까지 대기하는 동기화 개체입니다.
binary_semaphore를 이용하여 쓰레드를 동기화할 수 있습니다.
atomic_flag를 이용하여 쓰레드를 동기화할 수 있습니다.

숫자 라이브러리

항목 내용
complex 복소수를 처리하는 개체입니다.

(C++11~)
complexproj()이 추가되었습니다.

(C++20~)
complexconstexpr 지원이 개선되었습니다.
valarray 값의 집합을 다루는 개체입니다.
공통 수학 함수 abs(), exp(), sin() 등 일반 수학 함수, 지수 함수, 거듭 제곱 함수, 삼각 함수, 에러 및 감마 함수, 부동 소수점 함수, 분류 및 비교 함수를 제공합니다.

(C++11~)
공통 수학 함수가 보강되었습니다.
부동 소수점 환경 (C++11~) (C++11~)
부동 소수점 환경이 추가되었습니다.
특수 수학 함수 (C++17~) (C++17~)
특수 수학 함수가 추가되었습니다.
수학 상수 (C++20~) (C++20~)
e_v, log2e_v, log10e_v, pi_v등이 추가되었습니다.
비트 조작 (C++20~) (C++20~)
has_single_bit(), bit_ceil(), bit_floor(), bit_width(), rotl(), rotr(), countl_zero(), countl_one(), countr_zero(), countr_one()endian처리가 추가되었습니다.
난수 생성기 C스타일 난수 생성기rand(), srand()를 제공합니다.

(C++11~)
난수 생성기가 추가되어 다양한 형태의 난수를 만들 수 있습니다.

정규 표현식 라이브러리 (C++11~)

항목 내용
regex_match() (C++11~) (C++11~)
regex_match()가 추가되어 문자열의 전체가 정규 표현식과 일치하는지 검사할 수 있습니다.
regex_search() (C++11~) (C++11~)
regex_search()가 추가되어 문자열의 일부가 정규 표현식과 일치하는지 검사할 수 있습니다.
regex_iterator가 추가되었습니다. 문자열 전체에 대해 regex_search() 한 결과의 이터레이터입니다.
regex_replace() (C++11~) (C++11~)
regex_replace()가 추가되어 문자열에서 정규 표현식과 일치하는 부분을 수정할 수 있습니다.

입출력 라이브러리

항목 내용
C스타일 입출력 fopen(), fclose()등 C스타일 입출력을 제공합니다.

(C++11~)
vscanf(), snprintf(), vsnprintf()가 추가되었습니다.
C++스타일 입출력 파일 입출력, 문자열 입출력, 배열 입출력을 제공하고, 스트림 기반 타입 으로 재정의되어, iosteam, filebuf등을 제공합니다.
사전 정의된 표준 스트림 개체 cin으로 표준 입력을 받고, cout으로 표준 출력을 합니다.
서식 조정자 endl()등 표준 입출력 제어를 제공합니다.

(C++11~)
hexfloat(), defaultfloat(), get_money(), put_money(), get_time(), put_time()이 추가되었습니다.

(C++14~)
quoted()가 추가되어 stringstream 으로 입출력시에 공백, 이스케이프 등을 유지시켜 줍니다.

emit_on_flush(), noemit_on_flush()가 추가되었습니다.
타입 streamoff, streamsize, fpos를 제공합니다.

(C++20~)
u8streampos가 추가되었습니다.
예외 (C++11~) (C++11~)
예외가 추가되었습니다.
동기화 출력 (C++20~) (C++20~)
basic_syncbuf, basic_osyncstream, syncbuf, wsyncbuf, osyncstream, wosyncstream가 추가되어 쓰레드 내에서도 뒤섞이지 않도록 해줍니다.
프린트 함수 (C++23~) (작성중)

파일 시스템 라이브러리 (C++17~)

항목 내용
경로 문자열 (C++17~) (C++17~)
path, absolute(), relative()등이 추가되어 경로 문자열을 생성할 수 있습니다.
경로 탐색 (C++17~) (C++17~)
current_path(), directory_iterator(), recursive_directory_iterator()등이 추가되어 경로를 탐색할 수 있습니다.
파일 정보 (C++17~) (C++17~)
space(), file_size(), status(), last_write_time(), permissions()등이 추가되어 파일 정보를 구할 수 있습니다.
파일 복사/수정/삭제 (C++17~) (C++17~)
copy(), create_directory(), remove(), rename(), resize_file()등이 추가되어 파일을 복사/수정/삭제할 수 있습니다.
예외 (C++17~) (C++17~)
filesystem_error가 추가되었습니다. 파일 시스템 오류가 있는 경우 예외를 방출합니다.
파일 타입 (C++17~) (C++17~)
파일이나 디렉토리의 타입을 검사합니다.

현지화 라이브러리

항목 내용
C스타일 Locale (작성중)
Locale (작성중)
Facet 카테고리 (작성중)
Facet (작성중)
문자 분류(Locale) (C++11~)
isblank()가 추가되었습니다.
문자 조작(Locale) (작성중)
문자열 현지화 변환 (C++11~C++17) (작성중)

진단 라이브러리

항목 내용
진단 assert()로 설계한 기능이 올바르게 사용되는지 디버그 모드에서 확인합니다.
exception throw를 이용한 예외 보고시 일관된 인터페이스를 제공합니다.
표준 예외 out_of_range, bad_alloc등의 예외를 제공합니다.

(C++11~)
future_error, regex_error, system_error, ios_base::failure, bad_weak_ptr, bad_function_call, bad_array_new_length가 추가되었습니다.

(C++17~)
filesystem_error, bad_any_cast, bad_optional_access, bad_variant_access가 추가되었습니다.

(C++20~)
nonexistent_local_time, ambiguous_local_time, format_error가 추가되었습니다.
예외 처리 실패 예외를 catch()하지 않았을때 terminate()를 호출하여 terminate_handler를 호출합니다.

(C++11~)
get_terminate()가 추가되었습니다.
동적 예외 사양 실패 동적 예외 사양에서 명시한 예외 이외의 예외가 발생할때 unexpected()를 호출하여 unexpected_handler를 호출합니다.

(C++11~)
deprecate 되었습니다.
오류 번호 <cerrono>매크로 상수로 정의되어 있습니다.
자세한 내용은 cppreference.com을 참고하시기 바랍니다.
예외 캡쳐 및 저장 (C++11~) (C++11~)
예외 캡쳐 및 저장이 추가되었습니다.
시스템 오류(C++11~) (C++11~)
시스템 오류가 추가되었습니다.
Stacktrace (C++23~) (작성중)

deprecate/remove

항목 내용
(~C++11) auto_ptr배열delete[] 미지원, 좌측값복사 대입 연산시 이동 동작을 하는 등의 사유로 deprecate 되었습니다.
함수자 타입 특성 클래스(unary_function, binary_function등), 바인더(bind1st(), bind2nd()등), 어뎁터와 부정자(mem_fun(), mem_fun_ref(), ptr_fun(), not1(), not2(), unary_negate(), binary_negate(), pointer_to_unary_function(), pointer_to_binary_function() 등)가 람다 표현식, function, bind(), mem_fn()등으로 대체되어 deprecate 되었습니다.
동적 예외 사양이 deprecate 되면서 unexpected()도 함께 deprecate 되었습니다.
gets()가 deprecate 되었습니다.
(~C++14) random_shuffle()이 deprecate 되었습니다. shuffle()을 사용하세요.
(~C++17) iterator가 deprecate 되었습니다.
초기화 되지 않은 스토리지(raw_storage_iterator, get_temporary_buffer, return_temporary_buffer), is_literal_type가 deprecate 되었습니다.
iostream 별칭(io_state, open_mode, seek_dir, streamoff, streamoff)이 deprecate 되었습니다.
문자열 현지화 변환(wstring_convert, wbuffer_convert, codecvt_utf8, codecvt_utf16, codecvt_utf8_utf16, codecvt_mode)이 기존 구현이 정상적으로 되었는지 확인되지 않아 deprecate 되었습니다.
(~C++20) 삼중 비교 연산자가 추가되어 !=, >, <=, >=deprecate 되었으며, 개별 개체에서도 삼중 비교 연산자로 대체되었습니다.
is_poddeprecate되었습니다.
result_ofdeprecate되었습니다.
atomic_init(), ATOMIC_VAR_INIT()deprecate 되었습니다.

태그:

카테고리:

업데이트:

댓글남기기