Обобщенное программирование и STL: использование и наращивание стандартной библиотеки шаблонов C++

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

В этой книге идея обобщенного программирования демонстрируется на вполне реальном и содержательном примере - на так называемой Стандартной библиотеке шаблонов (STL - Standard Template Library), которая важной составной частью вошла в Международный стандарт языка C++. В тексте последовательно рассматриваются и разъясняются понятия и механизмы, необходимые для реализации шаблонов библиотеки. Значительную часть издания занимают два справочных раздела: раздел концепций, используемых при создании библиотеки, и раздел алгоритмов и классов. Книга будет необходима программистам, активно использующим язык C++ и библиотеку STL, а также тем, кто хочет разрабатывать собственные шаблоны. Теги: c++, stl (просьба добавить)

Author(s): Мэтью Остерн
Publisher: Невский Диалект
Year: 2004

Language: Russian
Commentary: 1146120599. 600dpi+OCR
Pages: 545
City: Санкт-Петербург

Содержание......Page 5
Предисловие к русскому изданию......Page 12
Предисловие......Page 13
Обобщенное программирование......Page 14
Как читать эту книгу......Page 16
Как эта книга появилась на свет......Page 17
Благодарности......Page 18
Часть 1. Введение в обобщенное программирование......Page 19
1.1. Простой пример......Page 20
1.2. Заключение......Page 24
2.1. Линейный поиск......Page 25
2.1.1. Линейный поиск в Си......Page 26
2.1.2. Диапазоны......Page 28
2.1.3. Линейный поиск в С++......Page 29
2.2. Концепции и моделирование......Page 32
2.3. Итераторы......Page 35
2.3.1. Итераторы ввода......Page 36
2.3.2. Итераторы вывода......Page 38
2.3.3. Однонаправленные итераторы......Page 41
2.3.5. Итераторы произвольного доступа......Page 44
2.4. Развитие концепций......Page 45
2.5. Заключение......Page 48
3.1.1. Типы значений......Page 50
3.1.2. Разностный тип......Page 53
3.1.4. Алгоритмы диспетчеризации и теги итератора......Page 55
3.1.5. Общее обозрение......Page 58
3.1.6. Признаки итераторов без iterator_traits......Page 60
3.2. Определение новых компонент......Page 61
3.2.1. Адаптеры итераторов......Page 63
3.2.3. Советы по написанию алгоритма......Page 64
3.3. Заключение......Page 65
4.1. Обобщенный линейный поиск......Page 66
4.2.1. Унарные и бинарные функциональные объекты......Page 69
4.2.2. Предикаты и бинарные объекты......Page 70
4.2.3. Ассоциированные типы......Page 71
4.3. Адаптеры функциональных объектов......Page 73
4.4. Предопределенные функциональные объекты......Page 75
4.5. Заключение......Page 76
5.1. Простой контейнер......Page 77
5.1.1. Класс массива......Page 78
5.1.2. Как это работает......Page 81
5.1.3. Последние штрихи......Page 82
5.2. Концепции контейнеров......Page 85
5.2.2. Итераторы......Page 86
5.2.3. Иерархия контейнеров......Page 88
5.2.4. Тривиальный контейнер......Page 89
5.3. Концепции контейнера переменного размера......Page 90
5.3.1. Последовательности......Page 91
5.3.2. Ассоциативные контейнеры......Page 94
5.3.3. Аллокаторы......Page 96
5.4. Заключение......Page 97
5.4.2. Определение вашего собственного контейнера......Page 98
6.1. Присваиваемый......Page 100
6.2. Конструируемый по умолчанию......Page 101
6.3. =Сравнимый......Page 102
6.4.1. <Сравнимый......Page 103
6.4.2. Строго слабо сравнимый......Page 104
7.1. Тривиальный итератор......Page 107
7.2. Итератор ввода......Page 109
7.3. Итератор вывода......Page 112
7.4. Однонаправленный итератор......Page 115
7.5. Двунаправленный итератор......Page 117
7.6. Итератор произвольного доступа......Page 118
8. Функциональные объекты......Page 122
8.1.1. Генератор......Page 123
8.1.2. Унарная функция......Page 124
8.1.3. Бинарная функция......Page 125
8.2.1. Адаптируемый генератор......Page 126
8.2.2. Адаптируемая унарная функция......Page 127
8.2.3. Адаптируемая бинарная функция......Page 128
8.3.1. Предикат......Page 129
8.3.2. Бинарный предикат......Page 130
8.3.4. Адаптируемый бинарный предикат......Page 131
8.3.5. Строгое слабое упорядочение......Page 132
8.4.1. Генератор случайных чисел......Page 134
8.4.2. Функция хеширования......Page 135
9.1.1. Контейнер......Page 137
9.1.2. Однонаправленный контейнер......Page 143
9.1.3. Реверсивный контейнер......Page 145
9.1.4. Контейнер произвольного доступа......Page 146
9.2.1. Последовательность......Page 147
9.2.2. Последовательность с начальной вставкой......Page 153
9.2.3. Последовательность с концевой вставкой......Page 155
9.3.1. Ассоциативный контейнер......Page 156
9.3.2. Уникальный ассоциативный контейнер......Page 161
9.3.3. Множественный ассоциативный контейнер......Page 163
9.3.4. Простой ассоциативный контейнер......Page 164
9.3.5. Парный ассоциативный контейнер......Page 166
9.3.6. Сортированный ассоциативный контейнер......Page 167
9.3.7. Хешированный ассоциативный контейнер......Page 171
9.4. Аллокатор......Page 176
Часть 3. Справочное руководство: алгоритмы и классы......Page 183
10.1. Класс pair......Page 184
10.2.1. Класс iterator_traits......Page 186
10.2.2. Классы тегов итераторов......Page 188
10.2.3. distance......Page 190
10.2.4. advance......Page 192
10.2.5. Базовый класс итераторов......Page 193
10.3. Класс allocator......Page 196
10.4.1. construct......Page 198
10.4.2. destroy......Page 199
10.4.3. uninitialized_copy......Page 200
10.4.4. uninitialized_fill......Page 202
10.4.5. uninitialized_fill_n......Page 204
10.5. Временные буферы......Page 205
10.5.1. get_temporary_buffer......Page 206
10.5.2. return_temporary_buffer......Page 207
11.1.1. find (поиск)......Page 208
11.1.2. find_if (поиск по условию)......Page 209
11.1.3. adjacent_find (поиск соседних)......Page 211
11.1.4. find_first_of (поиск первого из)......Page 213
11.2.1. search (поиск вхождения диапазона)......Page 215
11.2.2. find_end (поиск последнего вхождения диапазона)......Page 217
11.2.3. search_n (поиск n последовательных элементов)......Page 219
11.3.1. count (подсчет)......Page 222
11.3.2. count_if (подсчет по условию)......Page 224
11.4. for_each (выполнение для каждого)......Page 226
11.5.1. equal (сравнение двух диапазонов)......Page 228
11.5.2. mismatch (поиск различия)......Page 230
11.6.2. max (определение большего из двух)......Page 232
11.6.1. min (определение меньшего из двух)......Page 234
11.6.3. min_element (поиск наименьшего в диапазоне)......Page 236
11.6.4. max_element (поиск наибольшего в диапазоне)......Page 237
12.1.1. copy (копирование)......Page 239
12.1.2. copy_backward (копирование в обратном порядке)......Page 241
12.2.1. swap (обмен)......Page 243
12.2.2. iter_swap (обмен по итераторам)......Page 244
12.2.3. swap_ranges (обмен диапазонов)......Page 245
12.3. transform (преобразование)......Page 246
12.4.1. replace (замена)......Page 249
12.4.2. replace_if (замена по условию)......Page 250
12.4.3. replace_copy (замена с копированием)......Page 251
12.4.4. replace_copy_if (замена с копированием по условию)......Page 253
12.5.1. fill (заполнение)......Page 254
12.5.2. fill_n (заполнение первых n)......Page 255
12.5.4. generate_n (генерация первых n)......Page 256
12.6.1. remove (удаление)......Page 257
12.6.2. remove_if (удаление по условию)......Page 259
12.6.3. remove_copy (удаление с копированием)......Page 260
12.6.4. remove_copy_if (удаление с копированием по условию)......Page 262
12.6.5. unique (единственные)......Page 263
12.6.6. unique_copy (единственные с копированием)......Page 266
12.7.1. reverse (переворачивание)......Page 268
12.7.2. reverse_copy (переворачивание с копированием)......Page 269
12.7.3. rotate (циклический сдвиг)......Page 270
12.7.4. rotate_copy (циклический сдвиг с копированием)......Page 271
12.7.5. next_permutation (следующая перестановка)......Page 272
12.7.6. prev_permutation (предыдущая перестановка)......Page 274
12.8.1. partition (разбиение)......Page 276
12.8.2. stable_partition (стабильное разбиение)......Page 277
12.9. Случайные перестановки и выборки......Page 278
12.9.1. random_shuffle (случайная перестановка)......Page 279
12.9.2. random_sample (случайная выборка)......Page 280
12.9.3. random_sample_n (случайная выборка из n)......Page 282
12.10.1. accumulate (накопление)......Page 284
12.10.2. inner_product (скалярное произведение)......Page 286
12.10.3. partial_sum (частичная сумма)......Page 287
12.10.4. adjacent_difference (разность соседних элементов)......Page 289
13.1. Сортировка диапазонов......Page 292
13.1.1. sort (сортировка)......Page 293
13.1.2. stable_sort (стабильная сортировка)......Page 295
13.1.3. partial_sort (частичная сортировка)......Page 298
13.1.4. partial_sort_copy (частичная сортировка с копированием)......Page 300
13.1.5. nth_element (n-й элемент)......Page 302
13.1.6. is_sorted (является отсортированным)......Page 304
13.2.1. Двоичный поиск......Page 305
13.2.1.1. binary_search (двоичный поиск)......Page 306
13.2.1.2. lower_bound (поиск первого возможного вхождения)......Page 307
13.2.1.3. upper_bound (поиск последнего нужного элемента)......Page 310
13.2.1.4. equal_range (поиск интервала возможного вхождения)......Page 312
13.2.2.1. merge (слияние)......Page 315
13.2.2.2. inplace_merge (слияние "на месте")......Page 317
13.2.3. Операции над множествами на отсортированных диапазонах......Page 319
13.2.3.1. includes (проверка включения подмножества)......Page 320
13.2.3.2. set_union (объединение множеств)......Page 322
13.2.3.3. set_intersection (пересечение множеств)......Page 325
13.2.3.4. set_difference (разность множеств)......Page 328
13.2.3.5. set_symmetric_difference (симметрическая разность множеств)......Page 331
13.3.1. make_heap (создание кучи)......Page 334
13.3.2. push_heap (добавление элемента в кучу)......Page 335
13.3.3. pop_heap (извлечение из кучи)......Page 337
13.3.4. sort_heap (сортировка кучи)......Page 339
13.3.5. is_heap (является ли кучей)......Page 340
14.1.1. front_insert_iterator......Page 342
14.1.2. back_insert_iterator......Page 345
14.1.3. insert_iterator......Page 347
14.2.1. istream_iterator......Page 351
14.2.2. ostream_iterator......Page 354
14.2.3. istreambuf_iterator......Page 356
14.2.4. ostreambuf_iterator......Page 358
14.3. reverse_iterator......Page 360
14.4. raw_reverse_iterator......Page 365
15.1.1. unary_function......Page 368
15.1.2. binary_function......Page 369
15.2.1. plus (сложение)......Page 370
15.2.2. minus (вычитание)......Page 371
15.2.3. multiplies (умножение)......Page 373
15.2.4. divides (деление)......Page 374
15.2.5. modulus (получение остатка от деления)......Page 375
15.2.6 negate (изменение знака)......Page 377
15.3.1. equal_to (равно)......Page 378
15.3.2. not_equal_to (не равно)......Page 379
15.3.3. less (меньше)......Page 380
15.3.4. greater (больше)......Page 381
15.3.5. less_equal (меньше или равно)......Page 383
15.3.6. greater_equal (больше или равно)......Page 384
15.4. Логические операции......Page 385
15.4.1. logical_and (логическое И)......Page 386
15.4.2. logical_or (логическое ИЛИ)......Page 387
15.4.3. logical_not (логическое отрицание)......Page 388
15.5.1. identity (тождественность)......Page 389
15.5.2. project1st......Page 390
15.5.3. project2nd......Page 392
15.5.4. select1st......Page 393
15.5.5. select2nd......Page 394
15.6.1. hash......Page 395
15.6.2. subtractive_rng......Page 396
15.7.1. mem_fun_t......Page 398
15.7.2. mem_fun_ref_t......Page 400
15.7.3. mem_fun1_t......Page 402
15.7.4. mem_fun1_ref_t......Page 404
15.7.5. const_mem_fun_t......Page 406
15.7.6 const_mem_fun_ref_t......Page 408
15.7.7 const_mem_fun1_t......Page 410
15.7.8 const_mem_fun1_ref_t......Page 412
15.8.1. binder1st......Page 414
15.8.2. binder2st......Page 415
15.8.3. pointer_to_unary_function......Page 417
15.8.4. pointer_to_binary_function......Page 418
15.8.5. unary_negate......Page 420
15.8.6. binary_negate......Page 421
15.8.7. unary_compose......Page 423
15.8.8. binary_compose......Page 425
16.1.1. vector (вектор)......Page 427
16.1.2. list (список)......Page 434
16.1.3. slist (односвязный список)......Page 442
16.1.4. deque (двусторонняя очередь)......Page 450
16.2.1. set (множество)......Page 456
16.2.2. map (отображение, ассоциативная последовательность)......Page 462
16.2.3. multiset (мультимножество, множество с повторяющимися элементами)......Page 470
16.2.4. multimap (множественное отображение, ассоциативная последовательность с повторяющимися элементами)......Page 476
16.2.5. hash_set (хешированное множество)......Page 482
16.2.6. hash_map (хешированная ассоциативная последовательность)......Page 487
16.2.8. hash_multimap (хешированная ассоциативная последовательность с повторяющимися элементами)......Page 499
16.3.1. stack (стек)......Page 505
16.3.2. queue (очередь)......Page 508
16.3.3. priority_queue (приоритетная очередь)......Page 510
Приложение А. Переносимость и стандартизация......Page 515
А.1.1. Модель компиляции шаблонов......Page 516
А.1.2. Параметры шаблона по умолчанию......Page 517
А.1.3. Шаблоны-члены......Page 518
А.1.4. Частичная специализация......Page 519
А.1.5. Новые ключевые слова......Page 522
А.2.1. Аллокаторы......Page 525
А.2.2. Адаптеры контейнера......Page 526
А.2.3. Второстепенные изменения библиотеки......Page 527
А.3. Именование и компоновка......Page 528
Список литературы......Page 531
Алфавитный указатель......Page 533