19
Содержание Предисловие 27 Предисловие к первому изданию 32 Введение 33 Изменения во втором издании 33 Исторические сведения из предисловия к первому изданию 34 Что было потом 35 Благодарности из первого издания 36 Благодарности ко второму изданию 36 ЧАСТЬ I. ВВОДНЫЙ КУРС В STL 37 Глава 1. Введение 39 1.1. Для кого предназначена эта книга 40 1.2. Что такое обобщенное программирование 40 1.3. Обобщенное программирование и шаблоны C++ 42 1.3.1. Шаблоны классов 42 1.3.2. Шаблоны функций 44 1.3.3. Шаблоны функций-членов 45 1.3.4. Явное указание аргументов шаблонов 46 1.3.5. Параметры шаблона по умолчанию 47 1.3.6. Частичная специализация 47 1.4. Шаблоны и проблема разбухания кода47 1.5. Гарантии производительности STL 48 1.5.1. O-обозначения и связанные определения 48 1.5.2. Амортизированное время 49 1.5.3. Ограничения O-обозначений 50 Глава 2. Обзор компонентов STL 51 2.1. Контейнеры 51 2.1.1. Контейнеры последовательностей 51 2.1.2. Отсортированные ассоциативные контейнеры 55 2.2. Обобщенные алгоритмы 56 2.2.1. Обобщенный алгоритм find 56 2.2.2. Обобщенный алгоритм merge 59 2.3. Итераторы 61 2.4. Функциональные объекты 64 2.5. Адаптеры 67 2.6. Аллокаторы 70 Стр. 6 Стр. 6

Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

Содержание

Предисловие 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

Page 2: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

Список примеров 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

Page 3: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

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

Page 4: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

Список примеров 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

Page 5: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

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

Page 6: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

Список примеров 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

Page 7: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

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

Page 8: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

Список примеров 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

Page 9: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

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

Page 10: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

Список примеров 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

Page 11: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

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

Page 12: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

Список примеров 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

Page 13: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

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

Page 14: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

Список примеров 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

Page 15: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

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

Page 16: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

Список примеров

Пример 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

Page 17: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

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

Page 18: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

Список примеров 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

Page 19: Содержание · 8 Содержание 5.4. Алгоритмы, связанные с сортировкой 116 5.4.1. Отношения сравнения 116 5.4.2. Неубывающее

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