C++14 STL 철저 입문
처음 배울 때 최신 버전이어야 한다
C++14로 시작하는 STL 입문C++ 표준안은 시대의 흐름에 맞춰 3년 주기로 바뀌고 있다. C++08, C++11, C++14까지 나오면서 표준 템플릿 라이브러리(STL)도 바뀌었다. 옛 문법으로 STL을 학습하면 새 버전에서 바뀐 것을 다시 배워야 한다. STL을 입문할 때 C++14로 시작해야 한다.
C++14 STL의 단계별 입문서STL 자체는 방대하지만, 학습에는 단계가 있다. 컨테이너 → 반복자 → 알고리즘 → 고급 주제 순으로 학습하는 게 좋다. 이 순서는 STL의 첫 번째 관문인 컨테이너를 만드는 방법, 컨테이너에서 반복자를 사용하는 방법, 컨테이너와 반복자를 사용해 알고리즘을 적용하는 방법으로 설명한다. STL을 가장 효율적으로 입문할 수 있는 단계로 구성했다.
«C++14 STL 철저 입문»은 1~3장까지 공개합니다.
전자책 구입
목차
- 1장. 표준 템플릿 라이브러리
- 1.1 | 기본 아이디어
- 1.2 | 템플릿
- 1.3 | 컨테이너
- 1.4 | 반복자
- 1.4.1 반복자 얻기
- 1.4.2 반복자 카테고리
- 1.4.3 스트림 반복자
- 1.4.4 반복자 어댑터
- 1.5 | 반복자에 쓰이는 연산
- 1.6 | 스마트 포인터
- 1.6.1 unique_ptr<T> 포인터 사용하기
- 1.6.2 shared_ptr<T> 객체 사용하기
- 1.6.3 weak_ptr<T> 포인터
- 1.7 | 알고리즘
- 1.8 | 함수를 인수로 전달하기
- 1.8.1 함수 객체
- 1.8.2 람다 표현식
- 1.9 | 요 약
- 1.10 | 연습문제
- 2장. 순차 컨테이너
- 2.1 | 순차 컨테이너
- 2.1.1 컨테이너의 공통 함수 멤버
- 2.2 | array<T,N> 컨테이너 사용하기
- 2.2.1 원소에 접근하기
- 2.2.2 array 컨테이너에서 반복자 사용하기
- 2.2.3 array 컨테이너의 비교
- 2.3 | vector<T> 컨테이너 사용하기
- 2.3.1 vector<T> 컨테이너 생성하기
- 2.3.2 벡터의 용량과 크기
- 2.3.3 원소에 접근하기
- 2.3.4 vector 컨테이너에서 반복자 사용하기
- 2.3.6 원소를 삭제하기
- 2.3.7 vector<bool> 컨테이너
- 2.4 | deque<T> 컨테이너 사용하기
- 2.4.1 deque 컨테이너 생성하기
- 2.4.2 원소에 접근하기
- 2.4.3 원소를 추가하고 제거하기
- 2.4.4 deque 컨테이너의 내용을 대체하기
- 2.5 | list<T> 컨테이너 사용하기
- 2.5.1 list 컨테이너 생성하기
- 2.5.2 원소 추가하기
- 2.5.3 원소를 제거하기
- 2.5.4 원소를 정렬하고 병합하기
- 2.5.5 원소에 접근하기
- 2.6 | forward_list<T> 컨테이너 사용하기
- 2.7 | 반복자를 직접 정의하기
- 2.7.1 STL 반복자 요구사항
- 2.7.2 STL 접근 방식
- 2.8 | 요약
- 2.9 | 연습문제
- 3장. 컨테이너 어댑터
- 3.1 | 컨테이너 어댑터는 무엇인가?
- 3.2 | stack<T> 컨테이너 어댑터 생성과 사용하기
- 3.2.1 스택 연산
- 3.3 | queue<T> 컨테이너 어댑터 생성과 사용하기
- 3.3.1 큐 연산
- 3.3.2 queue 컨테이너의 실제 사용
- 3.4 | priority_queue<T> 컨테이너 어댑터 사용하기
- 3.4.1 우선순위 큐를 생성하기
- 3.4.2 우선순위 큐를 위한 연산
- 3.5 | 힙
- 3.5.1 힙 생성하기
- 3.5.2 힙 연산
- 3.6 | 포인터를 컨테이너에 저장하기
- 3.6.1 순차열 컨테이너에 포인터 저장하기
- 3.6.2 우선순위 큐에 포인터 저장하기
- 3.6.3 포인터 힙
- 3.6.4 기반 클래스 포인터를 담은 컨테이너
- 3.6.5 알고리즘을 포인터 범위에 적용하기
- 3.7 | 요약
- 3.8 | 연습문제
- 4장. map 컨테이너
- 4.1 | 맵 컨테이너 소개
- 4.2 | map 컨테이너 사용하기
- 4.2.1 map 컨테이너 생성하기
- 4.2.2 맵에 원소 삽입하기
- 4.2.3 map 원소를 내부에서 생성하기
- 4.2.4 map의 원소들에 접근하기
- 4.2.5 원소 삭제하기
- 4.3 | pair<>와 tuple<> 객체 사용하기
- 4.3.1 pair 연산
- 4.3.2 tuple 연산
- 4.3.3 tuple과 pair를 함께 사용
- 4.4 | multimap 컨테이너 사용하기
- 4.5 | 비교 함수를 바꾸기
- 4.5.1 greater<T> 객체 사용하기
- 4.5.2 원소를 비교하는 함수 객체 정의하기
- 4.6 | 해싱
- 4.6.1 해시 값을 생성하는 함수
- 4.7 | unordered_map 컨테이너 사용하기
- 4.7.1 unordered_map 컨테이너 생성과 관리하기
- 4.7.2 버킷 개수 조정하기
- 4.7.3 원소 삽입하기
- 4.7.4 원소에 접근하기
- 4.7.5 원소 제거하기
- 4.7.6 버킷에 접근하기
- 4.8 | unordered_multimap 컨테이너 사용하기
- 4.9 | 요약
- 4.10 | 연습문제
- 5장. set으로 작업하기
- 5.1 | set 컨테이너 이해하기
- 5.2 | set<T> 컨테이너 사용하기
- 5.2.1 원소 추가와 제거
- 5.2.2 원소에 접근하기
- 5.2.3 set으로 작업하기
- 5.2.4 set 반복자
- 5.2.5 set 컨테이너에 포인터 저장하기
- 5.3 | multiset<T> 컨테이너 사용하기
- 5.3.1 포인터를 파생 클래스 객체에 저장하기
- 5.4 | unordered_set<T> 컨테이너 사용하기
- 5.4.1 원소 추가하기
- 5.4.2 원소 가져오기
- 5.4.3 원소 삭제하기
- 5.4.4 버킷 리스트를 보여주기
- 5.5 | unordered_multiset<T> 컨테이너 사용하기
- 5.6 | set 연산
- 5.6.1 set_union() 알고리즘
- 5.6.2 set_intersection() 알고리즘
- 5.6.3 set_difference() 알고리즘
- 5.6.4 set_symmetric_difference() 알고리즘
- 5.6.5 includes() 알고리즘
- 5.6.6 집합 연산 실습
- 5.7 | 요약
- 5.8 | 연습문제
- 6장. 정렬, 병합, 검색, 분리
- 6.1 | 범위를 정렬하기
- 6.1.1 같은 원소의 정렬과 순서
- 6.1.2 부분 정렬
- 6.1.3 정렬된 범위의 테스트
- 6.2 | 범위를 병합하기
- 6.3 | 범위를 검색하기
- 6.3.1 범위에서 원소 찾기
- 6.3.2 범위에서 원소 범위 중에 하나를 찾기
- 6.3.3 범위에서 여러 원소를 찾기
- 6.4 | 범위를 분리하기
- 6.4.1 partition_copy() 알고리즘
- 6.4.2 partition_point() 알고리즘
- 6.5 | 이진 탐색 알고리즘
- 6.5.1 binary_search() 알고리즘
- 6.5.2 lower_bound() 알고리즘
- 6.5.3 equal_range() 알고리즘
- 6.6 | 요약
- C++ STL 철저 입문
- 7장. 다양한 알고리즘
- 7.1 | 원소 속성을 테스트하기
- 7.2 | 범위를 비교하기
- 7.2.1 범위에서 일치하지 않는 위치를 찾기
- 7.2.2 사전 순서로 범위 비교하기
- 7.2.3 범위의 순열
- 7.3 | 범위를 복제하기
- 7.3.1 n개의 원소들을 복제하기
- 7.3.2 조건에 따라 복제하기
- 7.3.3 역순으로 복제하기
- 7.4 | 원소 순서를 뒤집어서 복제하기
- 7.5 | 인접한 중복 원소를 제거하고 범위를 복제하기
- 7.6 | 범위에서 인접한 중복을 제거하기
- 7.7 | 범위를 회전하기
- 7.8 | 범위를 이동하기
- 7.9 | 범위에서 원소들을 제거하기
- 7.10 | 범위에서 원소를 설정하고 수정하기
- 7.10.1 원소 값을 함수로 생성하기
- 7.10.2 범위를 변경하기
- 7.10.3 범위의 원소를 치환하기
- 7.11 | 알고리즘을 적용하기
- 7.12 | 요약
- 7.13 | 연습문제
- 8장. 랜덤 숫자 생성하기
- 8.1 | 랜덤 숫자란 무엇인가?
- 8.2 | 확률, 분포, 엔트로피
- 8.2.1 확률이란 무엇인가?
- 8.2.2 분포란 무엇인가?
- 8.2.3 엔트로피는 무엇인가?
- 8.3 | STL에서 랜덤 숫자를 생성하기
- 8.3.1 랜덤 숫자 생성에서 시드
- 8.3.2 랜덤 시드 구하기
- 8.3.3 시드 순차열
- 8.4 | 분포 클래스
- 8.4.1 기본 랜덤 넘버 생성기
- 8.4.2 분포 객체를 생성하기
- 8.4.3 균등분포
- 8.4.4 정규분포
- 8.4.5 로그정규분포
- 8.4.6 정규분포와 관련된 다른 분포
- 8.4.7 샘플링분포
- 8.4.8 나머지 분포
- 8.5 | 랜덤 넘버 엔진과 생성기
- 8.5.1 선형 합동 엔진
- 8.5.2 메르센 트위스터 엔진
- 8.5.3 감산 캐리 엔진
- 8.6 | 원소 범위를 섞기
- 8.7 | 요약
- 8.8 | 연습문제
- 9장. 스트림 연산
- 9.1 | 스트림 반복자
- 9.1.1 입력 스트림 반복자
- 9.1.2 출력 스트림 반복자
- 9.2 | 삽입 연산자와 추출 연산자를 오버로딩하기
- 9.3 | 스트림 반복자를 파일과 사용하기
- 9.3.1 파일 스트림
- 9.3.2 파일 스트림 클래스 템플릿
- 9.3.3 스트림 반복자를 사용한 파일 입력
- 9.3.4 스트림 반복자를 사용해 파일 읽기를 반복하기
- 9.3.5 스트림 반복자를 사용한 파일 출력
- 9.4 | 스트림 반복자와 알고리즘
- 9.5 | 스트림 버퍼 반복자
- 9.5.1 입력 스트림 버퍼 반복자
- 9.5.2 출력 스트림 버퍼 반복자
- 9.5.3 스트림 버퍼 반복자와 파일 스트림 사용하기
- 9.6 | 문자열 스트림, 스트림, 스트림 버퍼 반복자
- 9.7 | 요약
- 9.8 | 연습문제
- 10장. 수치, 시간, 복소수 데이터 사용하기
- 10.1 | 수치 계산
- 10.2 | 수치 알고리즘
- 10.2.1 범위에 증분값을 저장하기
- 10.2.2 범위 합계
- 10.2.3 내적
- 10.2.4 인접 원소들의 차
- 10.2.5 부분 합
- 10.2.6 극댓값과 극솟값
- 10.3 | 수치 값을 저장하고 이용하기
- 10.3.1 valarray 객체의 기본 연산
- 10.3.2 단항 연산자
- 10.3.3 valarray 객체에 복합 할당 연산자 사용하기
- 10.3.4 valarray 객체에 이항 연산자 적용하기
- 10.3.5 valarray 객체의 원소에 접근하기
- 10.4 | 유리수 계산
- 10.5 | 시간 관련 템플릿
- 10.5.1 duration 정의하기
- 10.5.2 클록과 시점
- 10.6 | 복소수
- 10.6.1 복소수를 표현하는 객체를 생성하기
- 10.6.2 복소수 연산
- 10.6.3 복소수의 비교와 기타 연산
- 10.6.4 복소수를 사용하는 간단한 예제
- 10.7 | 요약
- 10.8 | 연습문제