#1. [모던 C++ STL] 주요 구성 요소 미리보기(C++11, C++14, C++17, C++20)
모던 C++ STL은 모던 C++의 변경에 맞춰 다음의 라이브러리들이 모두 개선되고 추가되었습니다.(모던 C++의 변경 내용은 [모던 C++] 주요 구성 요소 미리보기(C++11, C++14, C++17, C++20)를 참고하시기 바랍니다.)
모던 C++ STL은 모던 C++의 변경에 맞춰 다음의 라이브러리들이 모두 개선되고 추가되었습니다.(모던 C++의 변경 내용은 [모던 C++] 주요 구성 요소 미리보기(C++11, C++14, C++17, C++20)를 참고하시기 바랍니다.)
(C++11~) nullptr_t가 추가되었습니다. (C++11~) lldiv_t, lldiv_t, imaxdiv_t, float_t, double_t가 추가되었습니다. (C++11~) LLONG_MIN, LLONG_MAX가 추가되었습니다. (C...
(C++11~) get_new_handler()가 추가되었습니다. (C++11~) pointer_traits가 추가되어 포인터와 유사한 타입들을 다루는 표준화된 방법을 제공합니다. (C++11~) aligned_alloc()이 추가되어 정렬된 메모리를 ...
(C++11~) tuple이 추가되어 다수의 요소를 관리할 수 있는 데이터 전달용 개체를 좀 더 간편하게 만들 수 있습니다. (C++11~) move()가 추가되어 좌측값을 우측값으로 형변환할 수 있습니다. (C++11~) move_if_noexcept...
[MEC++#13] iterator 보다 const_iterator를 선호하라.(const_iterator 지원 참고) [MEC++#42] 기존 push_back()등의 삽입 대신 emplace_back()등의 삽입을 고려하라.(emplace(), emplac...
(C++11~) move_iterator 어뎁터가 추가되어 이터레이터가 가리키는 요소를 이동 연산 할 수 있습니다. (C++11~) make_move_iterator가 추가되었습니다. (C++11~) next()와 prev()가 추가되었습니다. ...
(C++11~) all_of(), any_of(), none_of(), find_if_not()이 추가되었습니다. (C++11~) minmax(), minmax_element()가 추가되었습니다. (C++11~) is_heap(), is_heap_unt...
(C++11~) 기존에 제공되던 함수자 타입 특성 클래스(unary_function, binary_function등), 바인더(bind1st(), bind2nd()등), 어뎁터와 부정자(mem_fun(), mem_fun_ref(), ptr_fun(), not1(), ...
(C++11~) u16string이 추가되어 UTF-16 인코딩 문자열을 지원합니다. (C++11~) u32string이 추가되어 UTF-32 인코딩 문자열을 지원합니다. (C++11~) isblank()가 추가되었습니다. (C++11~) ato...
(C++11~) complex에 proj()이 추가되었습니다. (C++11~) 공통 수학 함수가 보강되었습니다. (C++11~) 부동 소수점 환경이 추가되었습니다. (C++11~) 난수 생성기가 추가되어 다양한 형태의 난수를 만들 수 있습니다. ...
(C++11~) vscanf(), snprintf(), vsnprintf()가 추가되었습니다. (C++11~) hexfloat(), defaultfloat(), get_money(), put_money(), get_time(), put_time()이 추가되었습...
(C++11~) isblank()가 추가되었습니다. (C++11~C++17) 문자열 현지화 변환(wstring_convert, wbuffer_convert, codecvt_utf8, codecvt_utf16, codecvt_utf8_utf16, codecvt_...
(C++11~) 동적 예외 사양이 deprecate 되면서 unexpected()도 함께 deprecate 되었습니다. (C++11~) future_error, regex_error, system_error, ios_base::failure, bad_weak_...
(C++11~) type_traits가 추가되어 컴파일 타임 프로그래밍시 각 타입의 조건들을 검사하거나 타입 변환을 할 수 있습니다. (C++14~) is_null_pointer, is_final이 추가되었습니다. (C++17~) bool_constan...
(C++11~) ratio가 추가되어 소수점 오차없이 유리 분수를 표현할 수 있습니다. 분자와 분모를 따로 저장하여 유리 분수를 표현하며, 유틸리티들을 이용하여 컴파일 타임 유리수(정수와 분수) 연산을 지원합니다.
[MEC++#18] 소유권 독점 자원의 관리에는 unique_ptr를 사용하라.(unique_ptr 참고) [MEC++#22] PImpl 관용구를 사용할때에는 암시적으로 정의되는 특수 멤버 함수들을 구현 파일에서 정의하라.(unique_ptr을 이용한 PImp...
[MEC++#19] 소유권 공유 자원의 관리에는 shared_ptr을 사용하라.(shared_ptr 참고) new한 포인터를 직접 사용하지 마라.(shared_ptr 소유권 분쟁 참고) [MEC++#20] sha...
(C++11~) system_clock, time_point, duration 이 추가되어 좀더 다양한 정확도로 시간을 추적할 수 있습니다. (C++17~) floor(), ceil(), round(), abs()가 추가되어 time_point와 duratio...
(C++11~) tuple이 추가되어 다수의 요소를 관리할 수 있는 데이터 전달용 개체를 좀 더 간편하게 만들 수 있습니다. (C++11~) make_tuple(), tie(), forward_as_tuple()이 추가되어 tuple을 쉽게 생성할 수 있습니다...
[MEC++#34] bind() 보다는 람다람다 표현식를 선호하라.(bind() 참고) 람다 표현식이 가독성이 좋다.
(C++11~) hash()가 추가되어 각 타입별로 데이터의 해시값(Digest)을 구할 수 있습니다.
(C++11~) array가 추가되어 기존 C스타일의 배열처럼 연속된 메모리를 사용하는 컨테이너를 제공합니다. C스타일 배열처럼 컴파일 타임에 크기가 결정되어 스택에 할당되므로, 힙에 할당되는 vector 보다 성능이 좋습니다. (C++20) to_array(...
(C++11~) forward_list가 추가되어 단방향 리스트를 제공합니다. 기존 양방향 리스트인 list보다 요소 관리 공간을 작게 차지하며, push_front()로 요소의 앞쪽 방향으로 리스트를 구성합니다.
(C++11~) unordered_map, unordered_multimap, unordered_set, unordered_multiset가 추가되어 해시값(Digest)을 사용하는 정렬되지 않은 컨테이너를 제공합니다. (C++17~) insert_or_ass...
[MEC++#16] 상수 멤버 함수를 쓰레드에 안전하게 작성하라. mutable인 경우 mutex를 사용하라. [MEC++#37] thread 들을 모든 경로에서 합류 불가능하게 만들어라.(thread 참고) ...
(C++11~) condition_variable이 추가되어 쓰레드간 동기화를 위해 쓰레드를 wait()시킨뒤, 특정 조건이 되었을때 활성화 시킬 수 있습니다.
[MEC++40] 동시성에는 atomic을 사용하고, volatile은 최적화를 하면 안되는 특별한 메모리에 사용하라.(atomic, volatile 참고)
[MEC++#35] thread 기반 프로그래밍 보다 async() 기반 프로그래밍을 사용하라.(async() 참고) 코드가 간결하다. [MEC++#36] 비동기성이 필수일 때에는 launch::async를 지정...
(C++11~) regex_match()가 추가되어 문자열의 전체가 정규 표현식과 일치하는지 검사할 수 있습니다. (C++11~) regex_search()가 추가되어 문자열의 일부가 정규 표현식과 일치하는지 검사할 수 있습니다. (C++11~) reg...
(C++14~) integer_sequence가 추가되어 컴파일 타임에 정수 타입의 시퀀스를 만들 수 있습니다.
(C++14~) exchange()가 추가되어 주어진 값을 바꾸는 작업이 간편해 졌습니다. 특히 이동 생성자와 이동 대입 연산자 구현에 활용할 수 있습니다.
(C++14~) 표준 사용자 정의 리터럴이 추가되어 operator ""s, operator ""min, operator ""if, 등 문자열, 날짜 / 시간, 복소수 관련 표현이 간편해 졌습니다. (C++17~) operator ““sv가 추가되어 strin...
(C++17~) optional이 추가되어 값이 있을 수도 있고, 없을 수도 있는 데이터를 처리할 수 있어, 미확정 상태, 값을 처리하기 부적절한 상태, 함수 리턴값 성공 여부 처리를 좀더 단순하게 할 수 있습니다.
(C++17~) any가 추가되어 타입의 변동 가능성이 있는 데이터를 비교적 안전하게 사용할 수 있습니다.
(C++17~) variant가 추가되어 타입이 다른 여러 데이터들을 동일한 메모리 공간에서 쉽게 관리할 수 있습니다.
(C++17~) string_view가 추가되어 문자열을 읽기 전용으로 사용할 때 불필요한 문자열 복제가 없도록 해줍니다. (C++20~) u8string_view가 추가되었습니다.
(C++17~) 대부분의 알고리즘에서 병렬 작업을 지원하는 함수 오버로딩 버전이 추가되었습니다. seq, par, par_unseq으로 병렬 실행 정책을 지정할 수 있습니다. (C++20~) unseq가 병렬 실행 정책에 추가되었습니다.
(C++17~) polymorphic_allocator가 추가되어 할당시 런타임 다형성을 지원합니다. 메모리 리소스를 사용하여 메모리 풀을 손쉽게 만들 수 있습니다. (C++20~) allocate_bytes(), deallocate_bytes()등이 추가되어...
(C++17~) path, absolute(), relative()등이 추가되어 경로 문자열을 생성할 수 있습니다. (C++17~) current_path(), directory_iterator(), recursive_directory_iterator()등이 ...
(C++20~) same_as, derived_from, convertible_to, integral, floating_point, assignable_from, swappable, destructible, constructible_from, default_initi...
(C++20~) coroutine_handle 이 추가되어 코루틴을 재개하는 코루틴 핸들을 제공합니다. (C++20~) suspend_always, suspend_never가 추가되어 코루틴에서 사용하는 대기 가능 개체를 제공합니다. (C++20~) c...
(C++20~) 범위(Range)가 추가되어 이터레이팅할 수 있는 추상적인 요소들을 처리할 수 있습니다. (C++20~) 포인트 개체인 ranges::begin, ranges::end등이 추가되어 범위(Range)의 이터레이터를 구할 수 있습니다. (C...
(C++20~) span이 추가되어 C스타일 배열, array, vector, 메모리, string 등 연속된 메모리 시퀀스를 참조할 수 있습니다.
(C++20~) format(), format_to(), format_to_n()이 추가되어 %d, %s 처럼 간편하고, << 처럼 확장성 있는 서식화 방법을 지원합니다. (C++20~) 표준 서식 지정자가 추가되어 채움, 정렬, 부호, 너비, 정밀...