목차
1장 C++20의 새로운 기능
- 예제 코드
- 새로운 format 라이브러리로 텍스트 서식화하기
- constexpr로 컴파일 타임에 벡터와 문자열 사용하기
- 서로 다른 타입의 정수 안전하게 비교하기
- 삼중 비교를 위해 우주선 연산자(⇔) 사용하기
- 〈version〉 헤더를 사용하여 기능 시험 매크로 쉽게 찾기
- 컨셉과 제약조건을 통해 더 안전한 템플릿 만들기
- 모듈을 사용하여 템플릿 라이브러리의 재컴파일 피하기
- 레인지를 사용하여 컨테이너에 뷰 생성하기
2장 일반적인 STL 기능
- 예제 코드
- 새로운 span 클래스를 사용하여 C 배열을 안전하게 만들기
- 구조적 바인딩을 사용하여 다수의 값 반환하기
- if와 switch문 안에서 변수 초기화하기
- 템플릿 인수 추론을 사용하여 단순성과 명확성 높이기
- if constexpr 문을 사용하여 컴파일 타임 결정 단순화하기
3장 STL 컨테이너
- STL 컨테이너 타입에 대한 빠른 개요
- 예제 코드
- 단일 제거 함수를 사용하여 컨테이너의 값 제거하기
- 정렬되지 않은 벡터에서 상수 시간으로 값 제거하기
- 벡터의 요소에 직접적이고 안전하게 접근하기
- 벡터의 요소들의 정렬 유지하기
- 맵에 요소를 효율적으로 삽입하기
- 맵 항목의 키를 효율적으로 변경하기
- unordered_map에 사용자 정의 타입의 키 사용하기
- set으로 사용자 입력을 정렬하고 필터링하기
- deque으로 단순한 RPN 계산기 만들기
- map으로 단어 빈도수 계산기 만들기
- 벡터의 벡터로 긴 문자열 찾기
- multimap으로 작업 목록 만들기
4장 호환성있는 반복자
- 반복자가 기본
- 반복자 카테고리
- 반복자 컨셉
- 예제 코드
- 반복 가능한 레인지 생성하기
- 반복자를 STL 반복자 특성과 호환되게 하기
- 반복자 어댑터를 사용하여 STL 컨테이너 채우기
- 반복자로 생성기 만들기
- 역방향 반복자 어댑터를 사용하여 역방향으로 반복하기
- 센티널을 넣어 길이를 알 수 없는 객체 반복하기
- zip 반복자 어댑터 만들기
- 임의 접근 반복자 만들기
5장 람다 표현식
- 람다 표현식
- 클로저
- 예제 코드
- 람다를 사용하여 범위가 지정된 재사용 가능한 코드 만들기
- 람다를 알고리즘 라이브러리의 서술로 사용하기
- std::function을 다형적 래퍼로 사용하기
- 재귀로 람다 접합하기
- 서술을 논리적 결합으로 합치기
- 같은 입력으로 여러 람다 호출하기
- 맵 기반 람다를 사용하여 점프 테이블 만들기
6장 STL 알고리즘
- 예제 코드
- 한 반복자에서 다른 반복자로 복사하기
- 컨테이너의 요소들을 문자열로 합치기
- std::sort로 컨테이너 정렬하기
- std::transform으로 컨테이너 변경하기
- 컨테이너에 있는 아이템 찾기
- std::clamp로 컨테이너에 있는 값 한정하기
- std::sample로 데이터 집합의 표본 추출하기
- 일련의 데이터로부터 순열 생성하기
- 정렬된 컨테이너 병합하기
7장 문자열, 스트림과 서식화
- 문자열 서식화
- 예제 코드
- string_view 클래스를 경량 문자열 객체로 사용하기
- 문자열 접합하기
- 문자열 변형하기
- C++20의 format 라이브러리로 텍스트 서식화하기
- 문자열의 공백 제거하기
- 사용자 입력으로 문자열 읽기
- 파일에 있는 단어 수 세기
- 파일 입력으로 복합 구조 초기화하기
- char_traits로 문자열 클래스 커스터마이징하기
- 정규 표현식으로 문자열 파싱하기
8장 유틸리티 클래스
- 예제 코드
- std::optional로 선택적 값 관리하기
- 타입 안정성을 위해 std::any 사용하기
- std::variant로 서로 다른 타입 저장하기
- std::chrono로 시간 이벤트 다루기
- 가변 튜플을 위한 폴드 표현식 사용하기
- std::unique_ptr로 할당된 메모리 관리하기
- std::shared_ptr로 객체 공유하기
- 공유된 객체를 위한 약한 포인터 사용하기
- 관리 객체의 멤버 공유하기
- 난수 엔진 비교하기
- 난수 분포 생성기 비교하기
9장 동시성과 병렬성
- 예제 코드
- 특정 시간 동안 슬립하기
- 동시성을 위해 std::thread 사용하기
- 동시성을 위해 std::async 사용하기
- 실행 정책에 따라 STL 알고리즘 병렬로 실행하기
- 뮤텍스와 잠금으로 데이터 안전하게 공유하기
- std::atomic으로 플래그와 값 공유하기
- std::call_once로 스레드 초기화하기
- std::condition_variable을 사용하여 생산자-소비자 문제 해결하기
- 다수의 생산자와 소비자 구현하기
10장 파일 시스템 사용하기
- 예제 코드
- path 클래스를 위한 std::formatter 특수화하기
- path를 위한 조작 함수 사용하기
- 디렉터리의 파일 나열하기
- grep 유틸리티로 디렉터리와 파일 찾기
- regex와 directory_iterator로 파일명 변경하기
- 디스크 사용량 카운터 만들기
11장 생각해볼 주제들
- 예제 코드
- 검색 제안을 위한 trie 클래스 만들기
- 두 벡터의 오차 합 계산하기
- 나만의 split 알고리즘 만들기
- 기존 알고리즘을 레버리지하는 gather 알고리즘 만들기
- 연속된 공백 제거하기
- 숫자를 단어로 변환하기