목차
용어 대역표 ... 19
시작하면서 ... 25
0 시작 전 몸풀기
   0.1 주석 ... 32
   0.2 include ... 32
   0.3 main 함수 ... 33
   0.4 중괄호 ... 34
   0.5 표준 라이브러리를 사용하여 출력하기 ... 34
   0.6 return 문 ... 35
   0.7 살짝 깊이 들여다 보기 ... 35
   0.8 내용 정리 ... 38
   연습문제 ... 40
1 문자열 처리하기
   1.1 입력 ... 44
   1.2 이름에 테두리 만들기 ... 47
   1.3 내용 정리 ... 51
   연습문제 ... 52
2 루프와 카운트
   2.1 문제점 ... 56
   2.2 전체 구조 ... 56
   2.3 알 수 없는 개수의 행 출력하기 ... 57
      2.3.1 while 문 ... 58
      2.3.2 while 문 설계 ... 60
   2.4 행 출력하기 ... 62
      2.4.1 경계 문자 출력하기 ... 64
      2.4.2 비경계 문자 출력하기 ... 67
   2.5 완전한 테두리를 갖는 프로그램 ... 69
      2.5.1 std::의 반복적인 사용을 축약 ... 69
      2.5.2 간결함을 위해 for 문 사용하기 ... 70
      2.5.3 테스트 합치기 ... 71
      2.5.4 완전한 테두리 프로그램 ... 72
   2.6 카운팅 ... 74
   2.7 내용 정리 ... 75
   연습문제 ... 79
3 일괄 데이터로 작업하기
   3.1 학생 성적 계산하기 ... 82
      3.1.1 입력의 끝 테스트하기 ... 87
      3.1.2 루프 불변식 ... 89
   3.2 평균 대신 중앙 값 사용하기 ... 90
      3.2.1 vector에 일련의 데이터 저장하기 ... 90
      3.2.2 출력하기 ... 92
      3.2.3 몇 가지 추가적으로 살펴볼 점 ... 98
   3.3 내용 정리 ... 100
   연습문제 ... 101
4 프로그램과 데이터의 구조화
   4.1 계산 처리 구조화하기 ... 104
      4.1.1 중앙 값 찾기 ... 106
      4.1.2 성적 계산식 다시 구현하기 ... 107
      4.1.3 과제성적 읽기 ... 109
      4.1.4 함수 매개변수 양식 세 가지 ... 113
      4.1.5 함수를 사용해서 성적 계산하기 ... 114
   4.2 데이터 구조화하기 ... 117
      4.2.1 학생의 데이터를 모두 함께 저장하기 ... 118
      4.2.2 학생 레코드 관리하기 ... 118
      4.2.3 보고서 양식 출력하기 ... 121
   4.3 모두 합치기 ... 123
   4.4 성적 산출 프로그램을 쪼개기 ... 126
   4.5 개선된 성적 산출 프로그램 ... 129
   4.6 내용 정리 ... 131
   연습문제 ... 133
5 순차 컨테이너의 사용 및 문자열 분석
   5.1 학생들을 카테고리별로 분류하기 ... 136
      5.1.1 원하는 요소 삭제하기 ... 137
      5.1.2 순차 접근과 임의 접근 ... 140
   5.2 반복자(Iterator) ... 141
      5.2.1 반복자 타입 ... 142
      5.2.2 반복자 연산 ... 143
      5.2.3 간편한 사용법 ... 144
      5.2.4 students.erase(students.begin() + i)의 뜻 ... 145
   5.3 인덱스 대신 반복자 사용하기 ... 145
   5.4 성능 향상을 위해 자료구조를 다시 고민하기 ... 147
   5.5 list 타입 ... 148
      5.5.1 중요한 차이점 ... 150
      5.5.2 도대체 어떤게 좋다는 거죠? ... 151
   5.6 string 분석하기 ... 151
   5.7 split 함수 테스트하기 ... 155
   5.8 string 합치기 ... 157
      5.8.1 그림의 외곽 그리기 ... 157
      5.8.2 수직 결합 ... 160
      5.8.3 수평 결합 ... 161
   5.9 내용 정리 ... 163
   연습문제 ... 167
6 라이브러리 알고리즘 사용하기
   6.1 string 분석사기 ... 172
      6.1.1 split하는 또 다른 방법 ... 174
      6.1.2 회문(Palindromes) ... 177
      6.1.3 URL 찾기 ... 178
   6.2 성적 계산법의 비교 ... 183
      6.2.1 학생 레코드 다루기 ... 184
      6.2.2 성적 분석하기 ... 185
      6.2.3 평균 과제 성적에 기반한 성적 계산 ... 189
      6.2.4 완료된 과제의 중앙 값 ... 191
   6.3 학생 분류 문제 재시도 ... 192
      6.3.1 2-패스 솔루션 ... 192
      6.3.2 단일-패스 솔루션 ... 195
   6.4 알고리즘, 컨테이너 그리고 반복자 ... 196
   6.5 내용 정리 ... 197
   연습문제 ... 199
7 연관 컨테이너 사용하기
   7.1 효과적인 참조 방법을 제공하는 컨데이너 ... 202
   7.2 단어 개수 세기 ... 203
   7.3 교차-참조 테이블 생성 ... 205
   7.4 문장 생성하기 ... 210
      7.4.1 규칙 표현하기 ... 211
      7.4.2 문법 읽어들이기 ... 212
      7.4.3 문장 생성하기 ... 214
      7.4.4 무작위 요소를 선택하기 ... 218
   7.5 성능에 관하여 ... 220
   7.6 내용 정리 ... 220
   연습문제 ... 222
8 제네릭 함수 작성하기
   8.1 제네릭 함수란? ... 226
      8.1.1 알려지지 않은 타입의 중앙 값 ... 227
      8.1.2 템플릿 인스턴스화 ... 229
      8.1.3 제네릭 함수와 타입 ... 230
   8.2 자료구조 독립성 ... 231
      8.2.1 알고리즘과 반복자 ... 231
      8.2.2 순차적 읽기-전용 접근 ... 234
      8.2.3 순차적 쓰기-전용 접근 ... 235
      8.2.4 순차적 읽기-쓰기 접근 ... 237
      8.2.5 역방향으로 접근 ... 238
      8.2.6 임의 접근 ... 238
      8.2.7 반복자 범위 및 끝 지난 값 ... 240
   8.3 입력 및 출력 반복자 ... 241
   8.4 융통성을 위해 반복자 사용하기 ... 243
   8.5 내용 정리 ... 245
   연습문제 ... 246
9 새로운 타입 정의하기
   9.1 Student_info 되짚어 생각하기 ... 250
   9.2 Class 타입 ... 251
      9.2.1 멤버 함수 ... 252
      9.2.2 비멤버 함수들 ... 255
   9.3 보호정책(Protection) ... 256
      9.3.1 접근 함수(Accessor function) ... 258
      9.3.2 비어있는지 테스트 ... 259
   9.4 Student_info 클래스 ... 260
   9.5 생성자(Constructor) ... 261
      9.5.1 기본 생성자 ... 263
      9.5.2 인자를 사용하는 생성자 ... 264
   9.6 Student_info 클래스 사용하기 ... 264
   9.7 내용 정리 ... 266
   연습문제 ... 267
10 메모리 관리 및 저수준 자료구조
   10.1 포인터와 배열 ... 270
      10.1.1 포인터 ... 271
      10.1.2 함수에 대한 포인터 ... 273
      10.1.3 배열 ... 276
      10.1.4 포인터 산술 연산 ... 277
      10.1.5 인덱싱(Indexing) ... 279
      10.1.6 배열 초기화 ... 279
   10.2 문자열 리터럴 다시 살펴보기 ... 280
   10.3 문자 포인터 배열 초기화하기 ... 281
   10.4 main에 대한 인자들 ... 283
   10.5 파일 읽기 및 쓰기 ... 285
      10.5.1 표준 에러 스트림 ... 285
      10.5.2 여러 입력 파일과 출력 파일 다루기 ... 285
   10.6 메모리 관리의 세 종류 ... 288
      10.6.1 객체 할당 및 해제 ... 289
      10.6.2 배열 할당 및 해제 ... 290
   10.7 내용 정리 ... 291
   연습문제 ... 293
11 추상 데이터 타입 정의하기
   11.1 Vec 클래스 ... 296
   11.2 Vec 클래스 구현하기 ... 297
      11.2.1 메모리 할당 ... 298
      11.2.2 생성자(Constructors) ... 299
      11.2.3 타입 정의 ... 301
      11.2.4 인덱스 및 size ... 302
      11.2.5 반복자를 리턴하는 연산 ... 305
   11.3 Copy 처리하기 ... 306
      11.3.1 Copy 생성자 ... 306
      11.3.2 대입(Assignment) ... 308
      11.3,3 대입은 초기화가 아니다 ... 311
      11.3.4 소멸자(Destructor) ... 313
      11.3.5 디폴트 연산(Default operations) ... 314
      11.3.6 세 법칙(rule of three) ... 315
   11.4 동적인 Vec ... 316
   11.5 융통성있는 메모리 관리 ... 318
      11.5.1 최종 Vec 클래스 ... 320
   11.6 내용 정리 ... 325
   연습문제 ... 327
12 값(value)처럼 동작하는 클래스 객체 만들기
   12.1 단순한 문자열 클래스 ... 330
   12.2 자동 변환(Automatic conversions) ... 332
   12.3 Str 연산들 ... 333
      12.3.1 입ㆍ출력 연산자들 ... 335
      12.3.2 프렌드(Friend) ... 336
      12.3.3 다른 이항 연산자들 ... 339
      12.3.4 혼합-타입 표현식(Mixed-type expressions) ... 341
      12.3.5 이항 연산자 설계하기 ... 342
   12.4 어떤 변환은 위험하다 ... 343
   12.5 변환 연산자 ... 344
   12.6 변환 및 메모리 관리 ... 346
   12.7 내용 정리 ... 348
   연습문제 ... 349
13 상속 및 동적 바인딩 사용하기
   13.1 상속(Inheritance) ... 352
      13.1.1 보호정책(protection)에 대해서 다시 살펴보기 ... 354
      13.1.2 연산 ... 355
      13.1.3 상속 및 생성자 ... 357
   13.2 다형성(Polymorphism)및 virtual 함수 ... 359
      13.2.1 객체의 타입을 모르는 상태에서 값을 얻기 ... 361
      13.2.2 동적 바인딩(Dynamic binding) ... 362
      13.2.3 요약 ... 364
   13.3 상속을 통해 문제 해결하기 ... 365
      13.3.1 알지 못하는(가상적으로) 타입에 대한 컨테이너 ... 369
      13.3.2 가상 소멸자(Virtual destructor) ... 372
   13.4 간단한 핸들 클래스(handle class) ... 373
      13.4.1 핸들 읽기 ... 376
      13.4.2 핸들 객체 복사 ... 377
   13.5 핸들 클래스 사용하기 ... 379
   13.6 미묘한 부분들 ... 380
      13.6.1 상속 및 컨테이너 ... 381
      13.6.2 어떤 함수를 원하나요? ... 381
   13.7 내용 정리 ... 382
   연습문제 ... 385
14 메모리를 (거의) 자동으로 관리하기
   14.1 객체를 복사하는 핸들 ... 388
      14.1.1 제네릭 핸들 클래스(generic handle class) ... 389
      14.1.2 제네릭 핸들 사용하기 ... 394
   14.2 레퍼런스 카운트되는 핸들 ... 397
   14.3 데이터를 공유해야 될 때가 언제인지를 알려주는 핸들 ... 401
   14.4 제어가능 핸들에 대한 개선 ... 403
      14.4.1 제어할 수 없는 타입 복사하기 ... 405
      14.4.2 언제 복사가 필요할까요? ... 407
   14.5 내용 정리 ... 408
   연습문제 ... 408
15 문자 그림 다시 살펴보기
   15.1 설계 ... 410
      15.1.1 상속을 사용하여 구조 모델링하기 ... 411
      15.1.2 Pic_base 클래스 ... 414
      15.1.3 파생 클래스 ... 417
      15.1.4 복사 제어(Copy control) ... 421
   15.2 구현 ... 421
      15.2.1 사용자 인터페이스 구현하기 ... 422
      15.2.2 String_Pic 클래스 ... 425
      15.2.3 출력에 칸 삽입하기(padding) ... 427
      15.2.4 VCat_Pic 클래스 ... 428
      15.2.5 HCat_Pic 클래스 ... 430
      15.2.6 Frame_Pic 클래스 ... 431
      15.2.7 friend를 잊지 마세요 ... 432
   15.3 내용 정리 ... 435
   연습문제 ... 436
16 이제 어디로 갈까요?
   16.1 자기만의 추상개념을 사용할 것 ... 440
   16.2 더 많이 배울 것 ... 442
   연습문제 ... 443
A 언어 세부사항
   A.1 선언문(Declarations) ... 446
      A.1.1 지정자(Specifiers) ... 448
      A.1.2 선언자(Declarators) ... 449
   A.2 타입(Types) ... 452
      A.2.1 정수형 타입(Integral types) ... 453
      A.2.2 부동 소수점 실수(Floating point) ... 457
      A.2.3 상수 표현식(Constant expressions) ... 457
      A.2.4 변환(Conversions) ... 458
      A.2.5 열거형 타입(Enumerated types) ... 459
      A.2.6 오버로딩(Overloading) ... 460
   A.3 표현식(Expressions) ... 460
      A.3.1 연산자(Operators) ... 464
   A.4 구문(Statements) ... 464
B 라이브러리 요약
   B.1 입력-출력(Input-output) ... 468
   B.2 컨테이너와 반복자(Containers and iterators) ... 471
      B.2.1 일반적인 컨테이너 연산 ... 472
      B.2.2 순차적 컨테이너(Sequential containers) ... 473
      B.2.3 추가적인 순차적 연산 ... 474
      B.2.4 연관 컨테이너(Associative containers) ... 475
      B.2.5 반복(Iterators) ... 476
      B.2.6 vector ... 478
      B.2.7 list ... 479
      B.2.8 string ... 480
      B.2.9 pair ... 481
      B.2.10 map ... 481
   B.3 알고리즘(Algorithms) ... 482
찾아보기 ... 487
닫기