지은이 : 빌 와인먼
1971년, 16세의 나이에 첫 번째 컴퓨터를 만든 이후로 기술 분야에 종사해 왔다. 1970년대 초반부터 C와 C++로 코딩을 해왔으며, NASA, 뱅크오브아메리카, 제록스, IBM, 미 해군을 포함한 주요 고객을 위해 시스템과 애플리케이션을 개발했다. 전자공학자로서도 활동하며 보이저 2호 우주선, SAE의 오디오 앰프, 알텍 랜싱의 사운드 시스템 개발에 참여했다. 1990년대 중반부터는 글쓰기와 교육에 집중해 왔다. 그의 책과 강의는 HTML, SQL, CGI, Python, 그리고 물론 C와 C++을 다룬다. 온라인 교육의 초창기부터 활동해 온 그는 명확하고 간결한 글쓰기로 LinkedIn Learning에서 꾸준히 인기를 끌고 있다.
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 알고리즘 만들기
- 연속된 공백 제거하기
- 숫자를 단어로 변환하기
도서 DB 제공 - 알라딘 인터넷서점 (www.aladin.co.kr)