View
2
Download
0
Category
Preview:
Citation preview
Содержание
Предисловие 27
Предисловие к первому изданию 32
Введение 33Изменения во втором издании 33Исторические сведения из предисловия к первому изданию 34Что было потом 35Благодарности из первого издания 36Благодарности ко второму изданию 36
ЧАСТЬ I. ВВОДНЫЙ КУРС В STL 37
Глава 1. Введение 391.1. Для кого предназначена эта книга 401.2. Что такое обобщенное программирование 401.3. Обобщенное программирование и шаблоны C++ 42
1.3.1. Шаблоны классов 421.3.2. Шаблоны функций 441.3.3. Шаблоны функций-членов 451.3.4. Явное указание аргументов шаблонов 461.3.5. Параметры шаблона по умолчанию 471.3.6. Частичная специализация 47
1.4. Шаблоны и проблема “разбухания кода” 471.5. Гарантии производительности STL 48
1.5.1. O-обозначения и связанные определения 481.5.2. Амортизированное время 491.5.3. Ограничения O-обозначений 50
Глава 2. Обзор компонентов STL 512.1. Контейнеры 51
2.1.1. Контейнеры последовательностей 512.1.2. Отсортированные ассоциативные контейнеры 55
2.2. Обобщенные алгоритмы 562.2.1. Обобщенный алгоритм find 562.2.2. Обобщенный алгоритм merge 59
2.3. Итераторы 612.4. Функциональные объекты 642.5. Адаптеры 672.6. Аллокаторы 70
Стр. 6Стр. 6
Список примеров 7
Ошибка! Стиль не определен (Igor V Krassikov)
Глава 3. Отличие STL от других библиотек 713.1. Расширяемость 713.2. Взаимозаменяемость компонентов 723.3. Совместимость алгоритмов и контейнеров 73
Глава 4. Итераторы 754.1. Входные итераторы 754.2. Выходные итераторы 774.3. Однонаправленные итераторы 784.4. Двунаправленные итераторы 794.5. Итераторы с произвольным доступом 804.6. Иерархия итераторов STL: эффективная комбинация алгоритмови контейнеров 814.7. Итераторы вставки 834.8. Еще раз о входе и выходе: потоковые итераторы 844.9. Спецификация категорий итераторов, требуемых алгоритмами STL 864.10. Разработка обобщенных алгоритмов 874.11. Почему некоторые алгоритмы требуют более мощные итераторы 884.12. Выбор правильного алгоритма 894.13. Константные и изменяемые итераторы 894.14. Категории итераторов, предоставляемые контейнерами STL 91
Глава 5. Обобщенные алгоритмы 935.1. Базовая организация алгоритмов в STL 93
5.1.1. Версии “на месте” и копирующие версии 935.1.2. Алгоритмы с функциональными параметрами 95
5.2. Неизменяющие алгоритмы над последовательностями 965.2.1. find 965.2.2. adjacent_find 975.2.3. count 985.2.4. for_each 995.2.5. mismatch и equal 1005.2.6. search 102
5.3. Изменяющие алгоритмы над последовательностями 1045.3.1. copy и copy_backward 1045.3.2. fill 1055.3.3. generate 1065.3.4. partition 1075.3.5. random_shuffle 1095.3.6. remove 1105.3.7. replace 1115.3.8. reverse 1115.3.9. rotate 1115.3.10. swap 1125.3.11. swap_ranges 1135.3.12. transform 1145.3.13. unique 114
Стр. 7Стр. 7
8 Содержание
5.4. Алгоритмы, связанные с сортировкой 1165.4.1. Отношения сравнения 1165.4.2. Неубывающее и невозрастающее упорядочения 1185.4.3. sort, stable_sort и partial_sort 1195.4.4. nth_element 1225.4.5. binary_search, lower_bound, upper_bound и equal_range 1235.4.6. merge 1255.4.7. Теоретико-множественные операции над отсортированнымиструктурами 1265.4.8. Операции над пирамидами 1275.4.9. Минимум и максимум 1295.4.10. Лексикографическое сравнение 1305.4.11. Генераторы перестановок 130
5.5. Обобщенные числовые алгоритмы 1315.5.1. accumulate 1315.5.2. partial_sum 1325.5.3. adjacent_difference 1335.5.4. inner_product 134
Глава 6. Последовательные контейнеры 1376.1. Векторы 138
6.1.1. Типы 1386.1.2. Конструирование последовательностей 1396.1.3. Вставка 1436.1.4. Удаление 1476.1.5. Функции доступа 1496.1.6. Отношения равенства и “меньше, чем” 1506.1.7. Присваивания 151
6.2. Деки 1526.2.1. Типы 1546.2.2. Конструкторы 1546.2.3. Вставка 1546.2.4. Удаление 1556.2.5. Аксессоры 1556.2.6. Отношения равенства и “меньше, чем” 1556.2.7. Присваивания 155
6.3. Списки 1556.3.1. Типы 1576.3.2. Конструкторы 1576.3.3. Вставка 1576.3.4. Удаление 1576.3.5. Склейка 1596.3.6. Функции-члены, связанные с сортировкой 1606.3.7. Удаление 1616.3.8. Аксессоры 1616.3.9. Отношения равенства и “меньше, чем” 1626.3.10. Присваивания 162
Стр. 8Стр. 8
Список примеров 9
Ошибка! Стиль не определен (Igor V Krassikov)
Глава 7. Отсортированные ассоциативные контейнеры 1637.1. Множества и мультимножества 164
7.1.1. Типы 1647.1.2. Конструкторы 1657.1.3. Вставка 1657.1.4. Удаление 1687.1.5. Аксессоры 1707.1.6. Отношения эквивалентности и “меньше, чем” 1727.1.7. Присваивание 173
7.2. Отображения и мультиотображения 1737.2.1. Типы 1747.2.2. Конструкторы 1747.2.3. Вставка 1747.2.4. Удаление 1787.2.5. Аксессоры 1787.2.6. Отношения равенства и “меньше, чем” 1797.2.7. Присваивания 179
Глава 8. Функциональные объекты 1818.1. Передача функций через указатели 1818.2. Преимущества передачи функциональных объектов как параметровшаблонов 1838.3. Функциональные объекты, предоставляемые STL 187
Глава 9. Адаптеры контейнеров 1899.1. Адаптер стека 1909.2. Адаптер очереди 1919.3. Адаптер очереди с приоритетами 193
Глава 10. Адаптеры итераторов 197
Глава 11. Функциональные адаптеры 20111.1. Связыватели 20111.2. Инверторы 20211.3. Адаптеры для указателей на функции 203
ЧАСТЬ II. ПРИМЕРЫ ПРОГРАММ 207
Глава 12. Программа для поиска в словаре 20912.1. Поиск анаграмм данного слова 20912.2. Работа со строками и потоками 21112.3. Генерация перестановок и поиск в словаре 21312.4. Полная программа 21312.5. Насколько быстр разработанный код 214
Глава 13. Программа поиска всех групп анаграмм 21713.1. Поиск групп анаграмм 21713.2. Определение структуры данных для работы с STL 21813.3. Создание функциональных объектов для сравнений 21913.4. Полная программа поиска групп анаграмм 220
Стр. 9Стр. 9
10 Содержание
13.5. Чтение словаря в вектор объектов PS 22013.6. Использование объекта сравнения для сортировки 22113.7. Использование предиката эквивалентности для поиска равныхэлементов 22113.8. Использование функционального адаптера для получения объектапредиката 22213.9. Копирование группы анаграмм в выходной поток 22213.10. Вывод программы 223
Глава 14. Улучшенная программа поиска групп анаграмм 22514.1. Структура данных для хранения пар итераторов 22514.2. Хранение информации в отображении списков 22614.3. Упорядоченный по размерам вывод групп анаграмм 22614.4. Улучшенная программа поиска анаграмм 22714.5. Вывод программы 22814.6. Причины использования отображения 229
Глава 15. Ускорение программы поиска анаграмм: использованиемультиотображений 231
15.1. Поиск групп анаграмм, версия 3 23115.2. Объявление мультиотображения 23415.3. Чтение словаря в мультиотображение 23415.4. Поиск групп анаграмм в мультиотображении 23415.5. Упорядоченный по размерам вывод групп анаграмм 23615.6. Вывод программы 23615.7. Скорость работы программы 236
Глава 16. Определение класса итератора 23716.1. Новый вид итератора: подсчитывающий итератор 23716.2. Класс подсчитывающего итератора 238
Глава 17. STL и объектно-ориентированное программирование 24317.1. Использование наследования и виртуальных функций 24417.2. Устранение “разбухания кода” 248
Глава 18. Программа вывода дерева ученых в области теориивычислительных машин и систем 249
18.1. Сортировка аспирантов по датам 24918.2. Связь аспирантов с руководителями 25018.3. Поиск корней дерева 25118.4. Чтение файла 25418.5. Вывод результатов 25518.6. Полный исходный текст программы 256
Глава 19. Класс для хронометража обобщенных алгоритмов 25919.1. Препятствия точному хронометражу алгоритмов 25919.2. Преодоление препятствий 26019.3. Уточнение метода 26219.4. Автоматизация анализа при помощи класса 263
19.4.1. Вывод результатов 26519.5. Хронометраж алгоритмов сортировки STL 267
Стр. 10Стр. 10
Список примеров 11
Ошибка! Стиль не определен (Igor V Krassikov)
ЧАСТЬ III. СПРАВОЧНОЕ РУКОВОДСТВО ПО STL 271
Глава 20. Справочное руководство по итераторам 27320.1. Требования ко входным итераторам 27420.2. Требования к выходным итераторам 27520.3. Требования к однонаправленным итераторам 27620.4. Требования к двунаправленным итераторам 27720.5. Требования к итераторам с произвольным доступом 27720.6. Свойства итераторов 278
20.6.1. Базовый класс iterator 27920.6.2. Стандартные дескрипторы итераторов 279
20.7. Операции с итераторами 28020.8. istream_iterator 280
20.8.1. Файлы 28120.8.2. Объявление класса 28120.8.3. Примеры 28120.8.4. Описание 28120.8.5. Определения типов 28120.8.6. Конструкторы 28120.8.7. Открытые функции-члены 28220.8.8. Операции сравнения 282
20.9. ostream_iterator 28220.9.1. Файлы 28220.9.2. Объявление класса 28320.9.3. Примеры 28320.9.4. Описание 28320.9.5. Определения типов 28320.9.6. Конструкторы 28320.9.7. Открытые функции-члены 284
20.10. reverse_iterator 28420.10.1. Файлы 28420.10.2. Объявление класса 28420.10.3. Примеры 28420.10.4. Описание 28420.10.5. Конструктор 28520.10.6. Открытые функции-члены 28520.10.7. Глобальные операции 28620.10.8. Предикаты равенства и упорядочения 286
20.11. back_insert_iterator 28720.11.1. Файлы 28720.11.2. Объявление класса 28720.11.3. Примеры 28720.11.4. Описание 28720.11.5. Конструкторы 28720.11.6. Открытые функции-члены 28720.11.7. Сопутствующие шаблоны функций 288
20.12. front_insert_iterator 28820.12.1. Файлы 288
Стр. 11Стр. 11
12 Содержание
20.12.2. Объявление класса 28820.12.3. Конструкторы 28820.12.4. Открытые функции-члены 28820.12.5. Сопутствующие шаблоны функций 289
20.13. insert_iterator 28920.13.1. Файлы 28920.13.2. Объявление класса 28920.13.3. Примеры 28920.13.4. Конструкторы 28920.13.5. Открытые функции-члены 28920.13.6. Сопутствующие шаблоны функций 290
Глава 21. Справочное руководство по контейнерам 29121.1. Требования 291
21.1.1. Дизайн и организация контейнеров STL 29121.1.2. Общие члены всех контейнеров 29221.1.3. Требования к обратимым контейнерам 29421.1.4. Требования к контейнерам последовательностей 29421.1.5. Требования к отсортированным ассоциативным контейнерам 295
21.2. Описания организации классов контейнеров 29821.2.1. Файлы 29821.2.2. Объявление класса 29921.2.3. Примеры 29921.2.4. Описание 29921.2.5. Определения типов 29921.2.6. Конструкторы, деструкторы и связанные функции 29921.2.7. Операции сравнения 29921.2.8. Функции-члены для обращения к элементам 29921.2.9. Функции-члены для вставки 29921.2.10. Функции-члены для удаления 29921.2.11. Раздел(ы) дополнительных примечаний 299
21.3. vector 30021.3.1. Файлы 30021.3.2. Объявление класса 30021.3.3. Примеры 30021.3.4. Описание 30021.3.5. Определения типов 30121.3.6. Конструкторы, деструкторы и связанные функции вектора 30121.3.7. Операции сравнения 30321.3.8. Функции-члены вектора для обращения к элементам 30321.3.9. Функции-члены вектора для вставки 30421.3.10. Функции-члены вектора для удаления 30421.3.11. Замечания о функциях-членах вставки и удаления 305
21.4. deque 30521.4.1. Файлы 30521.4.2. Объявление класса 30521.4.3. Примеры 30621.4.4. Описание 30621.4.5. Определения типов 306
Стр. 12Стр. 12
Список примеров 13
Ошибка! Стиль не определен (Igor V Krassikov)
21.4.6. Конструкторы, деструкторы и связанные функции дека 30621.4.7. Операции сравнения 30721.4.8. Функции-члены дека для обращения к элементам 30721.4.9. Функции-члены дека для вставки 30821.4.10. Функции-члены дека для удаления 30821.4.11. Сложность вставки в дек 30921.4.12. Замечания о функциях-членах удаления 309
21.5. list 30921.5.1. Файлы 30921.5.2. Объявление класса 30921.5.3. Примеры 30921.5.4. Описание 31021.5.5. Определения типов 31021.5.6. Конструкторы, деструкторы и связанные функции списка 31121.5.7. Операции сравнения 31121.5.8. Функции-члены списка для обращения к элементам 31221.5.9. Функции-члены списка для вставки 31321.5.10. Функции-члены списка для удаления 31321.5.11. Специальные операции со списками 31321.5.12. Замечания о функциях-членах вставки 31521.5.13. Замечания о функциях-членах удаления 315
21.6. set 31521.6.1. Файлы 31521.6.2. Объявление класса 31621.6.3. Примеры 31621.6.4. Описание 31621.6.5. Определения типов 31621.6.6. Конструкторы, деструкторы и связанные функции множества 31721.6.7. Операции сравнения 31721.6.8. Функции-члены множества для обращения к элементам 31821.6.9. Функции-члены множества для вставки 31921.6.10. Функции-члены множества для удаления 31921.6.11. Специализированные операции множества 320
21.7. multiset 32021.7.1. Файлы 32021.7.2. Объявление класса 32021.7.3. Примеры 32021.7.4. Описание 32121.7.5. Определения типов 32121.7.6. Конструкторы, деструкторы и связанные функциимультимножества 32121.7.7. Операции сравнения 32221.7.8. Функции-члены мультимножества для обращения к элементам 32221.7.9. Функции-члены мультимножества для вставки 32321.7.10. Функции-члены мультимножества для удаления 32321.7.11. Специализированные операции мультимножества 324
Стр. 13Стр. 13
14 Содержание
21.8. map 32421.8.1. Файлы 32421.8.2. Объявление класса 32421.8.3. Примеры 32521.8.4. Описание 32521.8.5. Определения типов 32521.8.6. Конструкторы, деструкторы и связанные функции отображения 32621.8.7. Операции сравнения 32621.8.8. Функции-члены отображения для обращения к элементам 32721.8.9. Функции-члены отображения для вставки 32821.8.10. Функции-члены отображения для удаления 32821.8.11. Специализированные операции отображения 329
21.9. multimap 33021.9.1. Файлы 33021.9.2. Объявление класса 33021.9.3. Примеры 33021.9.4. Описание 33021.9.5. Определения типов 33021.9.6. Конструкторы, деструкторы и связанные функциимультиотображения 33021.9.7. Операции сравнения 33121.9.8. Функции-члены мультиотображения для обращения к элементам 33121.9.9. Функции-члены мультиотображения для вставки 33221.9.10. Функции-члены мультиотображения для удаления 33321.9.11. Специализированные операции мультиотображения 333
21.10. Адаптер контейнера stack 33421.10.1. Файлы 33421.10.2. Объявление класса 33421.10.3. Примеры 33421.10.4. Описание 33421.10.5. Определения типов 33521.10.6. Конструкторы 33521.10.7. Открытые функции-члены 33521.10.8. Операции сравнения 335
21.11. Адаптер контейнера queue 33621.11.1. Файлы 33621.11.2. Объявление класса 33621.11.3. Примеры 33621.11.4. Описание 33621.11.5. Определения типов 33621.11.6. Конструкторы 33621.11.7. Открытые функции-члены 33721.11.8. Операции сравнения 337
21.12. Адаптер контейнера priority_queue 33721.12.1. Файлы 33721.12.2. Объявление класса 33721.12.3. Примеры 33721.12.4. Описание 338
Стр. 14Стр. 14
Список примеров 15
Ошибка! Стиль не определен (Igor V Krassikov)
21.12.5. Определения типов 33821.12.6. Конструкторы 33821.12.7. Открытые функции-члены 33921.12.8. Операторы сравнения 339
Глава 22. Справочное руководство по обобщенным алгоритмам 34122.1. Организация описаний алгоритмов 341
22.1.1. Прототипы 34122.1.2. Примеры 34222.1.3. Описание 34222.1.4. Временная сложность 342
22.2. Неизменяющие алгоритмы над последовательностями 34222.3. for_each 343
22.3.1. Прототип 34322.3.2. Примеры 34322.3.3. Описание 34322.3.4. Временная сложность 344
22.4. find 34422.4.1. Прототипы 34422.4.2. Примеры 34422.4.3. Описание 34422.4.4. Временная сложность 344
22.5. find_first_of 34422.5.1. Прототипы 34422.5.2. Описание 34522.5.3. Временная сложность 345
22.6. adjacent_find 34522.6.1. Прототипы 34522.6.2. Примеры 34522.6.3. Описание 34522.6.4. Временная сложность 345
22.7. count 34622.7.1. Прототипы 34622.7.2. Примеры 34622.7.3. Описание 34622.7.4. Временная сложность 346
22.8. mismatch 34622.8.1. Прототипы 34622.8.2. Примеры 34622.8.3. Описание 34722.8.4. Временная сложность 347
22.9. equal 34722.9.1. Прототипы 34722.9.2. Примеры 34722.9.3. Описание 34722.9.4. Временная сложность 348
22.10. search 34822.10.1. Прототипы 348
Стр. 15Стр. 15
16 Содержание
22.10.2. Примеры 34822.10.3. Описание 34822.10.4. Временная сложность 348
22.11. search_n 34922.11.1. Прототипы 34922.11.2. Описание 34922.11.3. Временная сложность 349
22.12. find_end 34922.12.1. Прототипы 34922.12.2. Описание 35022.12.3. Временная сложность 350
22.13. Обзор изменяющих алгоритмов над последовательностями 35022.14. copy 351
22.14.1. Прототипы 35122.14.2. Примеры 35122.14.3. Описание 35122.14.4. Временная сложность 351
22.15. swap 35122.15.1. Прототипы 35122.15.2. Примеры 35222.15.3. Описание 35222.15.4. Временная сложность 352
22.16. transform 35222.16.1. Прототипы 35222.16.2. Примеры 35222.16.3. Описание 35322.16.4. Временная сложность 353
22.17. replace 35322.17.1. Прототипы 35322.17.2. Примеры 35322.17.3. Описание 35422.17.4. Временная сложность 354
22.18. fill 35422.18.1. Прототипы 35422.18.2. Примеры 35422.18.3. Описание 35422.18.4. Временная сложность 354
22.19. generate 35422.19.1. Прототипы 35422.19.2. Примеры 35522.19.3. Описание 35522.19.4. Временная сложность 355
22.20. remove 35522.20.1. Прототипы 35522.20.2. Примеры 35522.20.3. Описание 35622.20.4. Временная сложность 356
Стр. 16Стр. 16
Список примеров 17
Ошибка! Стиль не определен (Igor V Krassikov)
22.21. unique 35622.21.1. Прототипы 35622.21.2. Примеры 35622.21.3. Описание 35722.21.4. Временная сложность 357
22.22. reverse 35722.22.1. Прототипы 35722.22.2. Примеры 35722.22.3. Описание 35722.22.4. Временная сложность 358
22.23. rotate 35822.23.1. Прототипы 35822.23.2. Примеры 35822.23.3. Описание 35822.23.4. Временная сложность 358
22.24. random_shuffle 35822.24.1. Прототипы 35822.24.2. Примеры 35922.24.3. Описание 35922.24.4. Временная сложность 359
22.25. partition 35922.25.1. Прототипы 35922.25.2. Примеры 35922.25.3. Описание 35922.25.4. Временная сложность 360
22.26. Обзор алгоритмов, связанных с сортировкой 36022.27. sort 361
22.27.1. Прототипы 36122.27.2. Примеры 36222.27.3. Описание 36222.27.4. Временная сложность 363
22.28. nth_element 36322.28.1. Прототипы 36322.28.2. Примеры 36322.28.3. Описание 36322.28.4. Временная сложность 364
22.29. Бинарный поиск 36422.29.1. Прототипы 36422.29.2. Примеры 36522.29.3. Описание 36522.29.4. Временная сложность 365
22.30. merge 36522.30.1. Прототипы 36522.30.2. Примеры 36622.30.3. Описание 36622.30.4. Временная сложность 366
22.31. Теоретико-множественные операции над отсортированнымиструктурами 366
Стр. 17Стр. 17
18 Содержание
22.31.1. Прототипы 36722.31.2. Примеры 36822.31.3. Описание 36822.31.4. Временная сложность 368
22.32. Операции с пирамидами 36922.32.1. Прототипы 36922.32.2. Примеры 37022.32.3. Описание 37022.32.4. Временная сложность 370
22.33. min и max 37022.33.1. Прототипы 37022.33.2. Примеры 37122.33.3. Описание 37122.33.4. Временная сложность 371
22.34. Лексикографическое сравнение 37122.34.1. Прототипы 37122.34.2. Примеры 37122.34.3. Описание 37222.34.4. Временная сложность 372
22.35. Генераторы перестановок 37222.35.1. Прототипы 37222.35.2. Примеры 37222.35.3. Описание 37322.35.4. Временная сложность 373
22.36. Обзор обобщенных численных алгоритмов 37322.37. accumulate 373
22.37.1. Прототипы 37322.37.2. Примеры 37422.37.3. Описание 37422.37.4. Временная сложность 374
22.38. inner_product 37422.38.1. Прототипы 37422.38.2. Примеры 37422.38.3. Описание 37422.38.4. Временная сложность 375
22.39. partial_sum 37522.39.1. Прототипы 37522.39.2. Примеры 37522.39.3. Описание 37522.39.4. Временная сложность 376
22.40. adjacent_difference 37622.40.1. Прототипы 37622.40.2. Примеры 37622.40.3. Описание 37622.40.4. Временная сложность 376
Стр. 18Стр. 18
Список примеров 19
Ошибка! Стиль не определен (Igor V Krassikov)
Глава 23. Справочное руководство по функциональным объектами адаптерам 377
23.1. Требования 37723.1.1. Функциональные объекты 37723.1.2. Функциональные адаптеры 377
23.2. Базовые классы 37823.3. Арифметические операции 37823.4. Операции сравнения 37923.5. Логические операции 37923.6. Инверторы 38023.7. Связыватели 38023.8. Адаптеры для указателей на функции 38123.9. Адаптеры для указателей на функции-члены 381
Глава 24. Справочное руководство по аллокаторам 38524.1. Введение 385
24.1.1. Передача аллокаторов контейнерам STL 38524.2. Требования к аллокаторам 38524.3. Аллокатор по умолчанию 388
24.3.1. Файлы 38824.3.2. Объявление класса 38824.3.3. Описание 38824.3.4. Определения типов 38824.3.5. Конструкторы, деструкторы и связанные функции 38824.3.6. Другие функции-члены 38924.3.7. Операции сравнения 38924.3.8. Специализация для void 390
24.4. Пользовательские аллокаторы 390
Глава 25. Справочное руководство по утилитам 39525.1. Введение 39525.2. Функции сравнения 39525.3. pair 396
25.3.1. Файлы 39625.3.2. Объявление класса 39625.3.3. Примеры 39625.3.4. Описание 39625.3.5. Определения типов 39625.3.6. Члены-данные 39625.3.7. Конструкторы 39625.3.8. Функции сравнения 397
Приложение А. Заголовочные файлы STL 399
Приложение Б. Справочное руководство по строкам 401Б.1. Классы строк 401
Б.1.1. Файлы 401Б.1.2. Объявление класса 401B.1.3. Описание 401
Стр. 19Стр. 19
20 Содержание
Б.1.4. Определения типов 402Б.1.5. Конструкторы, деструкторы и связанные функции 403Б.1.6. Операции сравнения 405Б.1.7. Функции-члены для доступа к элементам 407Б.1.8. Функции-члены для вставки 408Б.1.9. Функции-члены для удаления 408Б.1.10. Дополнительные примечания 409
Б.2. Свойства символов 409Б.2.1. Файлы 409Б.2.2. Описание 409Б.2.3. Определения типов 409Б.2.4. Функции для работы с символами 410
Приложение В. Заголовочные файлы, используемые в примерах программ 413В.1. Файлы, используемые в примере 17.1 413
Приложение Г. Ресурсы 419Г.1. Адрес реализации SGI STL 419Г.2. Адрес для получения исходных текстов данной книги 419Г.3. Использованные компиляторы 419
Список литературы 420
Предметный указатель 422
Стр. 20Стр. 20
Список примеров
Пример 2.1. Использование обобщенного алгоритма STL reverseсо строкой и массивом 52Пример 2.2. Применение обобщенного алгоритма STL reverse к вектору 53Пример 2.3. Применение обобщенного алгоритма STL reverse к списку 54Пример 2.4. Демонстрация STL map 55Пример 2.5. Демонстрация работы обобщенного алгоритма find с массивом 56Пример 2.6. Демонстрация работы обобщенного алгоритма find с вектором 57Пример 2.7. Демонстрация работы обобщенного алгоритма find со списком 58Пример 2.8. Демонстрация работы обобщенного алгоритма find с деком 59Пример 2.9. Демонстрация работы обобщенного алгоритма mergeс массивом, списком и деком 60Пример 2.10. Демонстрация работы обобщенного алгоритма mergeпутем объединения частей массива и дека с помещением результатав список 61Пример 2.11. Демонстрация обобщенной функции accumulate 62Пример 2.12. Использование обобщенного алгоритма accumulateдля вычисления произведения 65Пример 2.13. Использование обобщенного алгоритма accumulateдля вычисления произведения с применением функционального объекта 65Пример 2.14. Использование обобщенного алгоритма accumulateдля вычисления произведения с применением multiplies 67Пример 2.15. Демонстрация обобщенного алгоритма accumulateс обратным итератором 68Вывод примера 2.15 69Пример 4.1. Демонстрация обобщенного алгоритма findсо входными итераторами массивов, списков и входных потоков 77Пример 5.1. Использование алгоритма сортировки “на месте” 93Пример 5.2. Использование reverse_copy, копирующей версииобобщенного алгоритма reverse 94Пример 5.3. Использование обобщенного алгоритма sort с бинарным предикатом 95Пример 5.4. Иллюстрация применения обобщенного алгоритма find_if 97Пример 5.5. Иллюстрация применения обобщенного алгоритма adjacent_find 97Пример 5.6. Демонстрация использования обобщенного алгоритма count 98Пример 5.7. Демонстрация использования обобщенного алгоритма for_each 99Вывод примера 5.7 100Пример 5.8. Демонстрация использования обобщенных алгоритмов equal и mismatch 100Вывод примера 5.8 101Пример 5.9. Демонстрация обобщенного алгоритма search 102Пример 5.10. Демонстрация использования обобщенных алгоритмов copyи copy_backward 104
Стр. 21Стр. 21
22 Список примеров
Пример 5.11. Демонстрация использования обобщенныхалгоритмов fill и fill_n 106Пример 5.12. Демонстрация использования обобщенного алгоритма generate 106Пример 5.13. Демонстрация использования обобщенных алгоритмов partitionи stable_partition 107Вывод примера 5.13 108Пример 5.14. Демонстрация использования обобщенного алгоритма random_shuffle 109Вывод примера 5.14 109Пример 5.15. Демонстрация использования обобщенного алгоритма remove 110Пример 5.16. Демонстрация использования обобщенного алгоритма replace 111Пример 5.17. Демонстрация использования обобщенного алгоритма rotate 112Пример 5.18. Демонстрация использования обобщенного алгоритма swap 112Пример 5.19. Демонстрация использования обобщенного алгоритма swap_ranges 113Пример 5.20. Демонстрация использования обобщенного алгоритма transform 114Вывод примера 5.20 114Пример 5.21. Демонстрация использования обобщенного алгоритма unique 115Вывод примера 5.21 115Пример 5.22. Демонстрация использования обобщенных алгоритмовsort, stable_sort и partial_sort 121Вывод примера 5.22 122Пример 5.23. Демонстрация использования обобщенного алгоритма nth_element 122Пример 5.24. Демонстрация использования обобщенныхалгоритмов бинарного поиска 124Пример 5.25. Демонстрация использования обобщенных алгоритмов слияния 125Пример 5.26. Демонстрация использования обобщенных операций над множествами 126Пример 5.27. Демонстрация использования обобщенных операций над пирамидами 128Пример 5.28. Демонстрация использования обобщенных алгоритмов min_elementи max_element 129Пример 5.29. Демонстрация использования обобщенного алгоритмаlexicographical_compare 130Пример 5.30. Демонстрация использования обобщенных алгоритмов перестановок 131Пример 5.31. Демонстрация использования обобщенного алгоритма accumulate 132Пример 5.32. Демонстрация использования обобщенного алгоритма partial_sum 132Вывод примера 5.32 133Пример 5.33. Демонстрация использованияобобщенного алгоритма adjacent_difference 133Пример 5.34. Демонстрация использования обобщенного алгоритма inner_product 134Вывод примера 5.34 135Пример 6.1. Демонстрация простейших конструкторов вектора STL 140Пример 6.2. Демонстрация конструкторов вектора STL с пользовательским типом 141Пример 6.3. Демонстрация конструкторов вектора STL с использованиемпользовательского типа и явным копированием 141Вывод примера 6.3 142Пример 6.4. Демонстрация копирующих конструкторов вектора STL 142Пример 6.5. Демонстрация функций вектора STL push_back и insert 143Пример 6.6. Демонстрация функций вектора STL capacity и reserve 145Вывод примера 6.6 146
Стр. 22Стр. 22
Список примеров 23
Ошибка! Стиль не определен (Igor V Krassikov)
Пример 6.7. Демонстрация операций back и pop_back над вектором STL 147Вывод примера 6.7 147Пример 6.8. Демонстрация функции erase вектора STL 148Пример 6.9. Демонстрация функций дека STL push_back и push_front 153Пример 6.10. Демонстрация функций списков STL push_back и push_front 156Пример 6.11. Демонстрация функции erase списков STL 158Пример 6.12. Демонстрация функций splice списков STL 159Пример 6.13. Демонстрация функций sort и unique списков STL 160Пример 7.1. Демонстрация создания множества и вставки в него 165Пример 7.2. Демонстрация создания мультимножества и вставки в него 166Пример 7.3. Демонстрация функций erase мультимножества 168Пример 7.4. Демонстрация функций-членов мультимножества для поиска 170Пример 7.5. Вычисление скалярного произведения кортежей,представленных векторами 176Вывод примера 7.5 176Пример 7.6. Вычисление скалярного произведения кортежей, представленныхотображениями 177Вывод примера 7.6 178Пример 8.1. Расширенное определение и вызов accumulate 182Пример 8.2. Расширенное определение и вызов accumulate 183Пример 8.3. Использование функционального объекта для подсчета операций,первая версия 185Вывод примера 8.3 185Пример 8.4. Использование функционального объекта для подсчета операций,вторая версия 186Пример 9.1. Иллюстрация адаптера стека 190Вывод примера 9.1 191Пример 9.2. Иллюстрация адаптера очереди 192Вывод примера 9.2 193Пример 9.3. Иллюстрация адаптера очереди с приоритетами 194Вывод примера 9.3 195Пример 10.1. Демонстрация прямого и обратного обхода 197Вывод примера 10.1 198Пример 10.2. Использование find с обычными и обратными итераторами 198Вывод примера 10.2 199Пример 11.1. Сортировка вектора в возрастающем порядке членов id 203Пример 11.2. Демонстрация применения адаптера для указателей на функции 204Вывод примера 11.2 205Вывод примера 12.1 209Пример 12.1. Программа поиска анаграмм в словаре, считываемом из файла 210вывод их в стандартный поток вывода 220Пример 13.1. Поиск всех групп анаграмм в словаре и вывод ихв стандартный поток вывода 220Вывод примера 13.1 223Пример 14.1. Вывод всех групп анаграмм в порядке уменьшения размера 227Вывод примера 14.1 228Пример 15.1. Поиск всех групп анаграмм в заданном словаре 232
Стр. 23Стр. 23
24 Список примеров
Пример 16.1. Демонстрация класса подсчитывающего итератора 237Вывод примера 16.1 241Пример 17.1. Комбинация компонентов STL с наследованиеми виртуальными функциями 244Вывод примера 17.1 247Вывод примера 18.1 250Пример 18.1. Вывод дерева ученых в области теории вычислительныхмашин и систем 256Пример 19.1. Первая попытка хронометража алгоритма sort 260Вывод примера 19.1 261Вывод примера 19.1а 262Пример 19.2. Хронометраж алгоритма sort со случайными векторами 267Вывод примера 19.2 268Вывод примера 19.2а 268Вывод примера 19.2б 269Пример 24.1. Демонстрация применения пользовательского аллокатора 392Вывод примера 24.1 393
Стр. 24Стр. 24
Recommended