Содержание

  • Предисловие
  • Глава 1
    Сборка приложений на C++
  • 1.0. Введение в сборку
  • 1.1. Получение и установка GCC
  • 1.2. Сборка простого приложения «Hello, World» из командной строки
  • 1.3. Сборка статической библиотеки из командной строки
  • 1.4. Сборка динамической библиотеки из командной строки
  • 1.5. Сборка сложного приложения из командной строки
  • 1.6. Установка Boost.Build
  • 1.7. Сборка простого приложения «Hello, World» с помощью Boost.Build
  • 1.8. Сборка статической библиотеки с помощью Boost.Build
  • 1.9. Сборка динамической библиотеки с помощью Boost.Build
  • 1.10. Сборка сложного приложения с помощью BoostBuild
  • 1.11. Сборка статической библиотеки с помощью IDE
  • 1.12. Сборка динамической библиотеки с помощью IDE
  • 1.13. Сборка сложного приложения с помощью IDE
  • 1.14. Получение GNU make
  • 1.15. Сборка простого приложения «Hello, World» с помощью GNU make
  • 1.16. Сборка статической библиотеки с помощью GNU Make
  • 1.17. Сборка динамической библиотеки с помощью GNU Make
  • 1.18. Сборка сложного приложения с помощью GNU make
  • 1.19. Определение макроса
  • 1.20. Указание опций командной строки из IDE
  • 1.21. Создание отладочной сборки
  • 1.22. Создание окончательной сборки
  • 1.23. Указание варианта библиотеки времени выполнения
  • 1.24. Включение строгого соответствия стандарту C++
  • 1.25. Указание определенной библиотеки для автоматической компоновки с исходным файлом
  • 1.26. Использование экспортируемых шаблонов
  • Глава 2
    Организация кода
  • 2.0. Введение
  • 2.1. Обеспечение единственности подключения заголовочного файла
  • 2.2. Обеспечение единственности экземпляра переменной при большом количестве исходных файлов
  • 2.3. Снижение числа #include с помощью предварительного объявления классов
  • 2.4. Предотвращение конфликта имен с помощью пространств имен
  • 2.5. Включение встраиваемого файла
  • Глава 3
    Числа
  • 3.0. Введение
  • 3.1. Преобразование строки в числовой тип
  • 3.2. Преобразование чисел в строки
  • 3.3. Проверка, содержит ли строка допустимое число
  • 3.4. Сравнение чисел с плавающей точкой с ограниченной точностью
  • 3.5. Лексический анализ строки, содержащей число в экспоненциальной форме
  • 3.6. Преобразования между числовыми типами
  • 3.7. Получение минимального и максимального значений числового типа
  • Глава 4
    Строки и текст
  • 4.0. Введение
  • 4.1. Дополнение строк
  • 4.2. Обрезка строк
  • 4.3. Хранение строк в последовательности
  • 4.4. Получение длины строки
  • 4.5. Обращение строк
  • 4.6. Разделение строки
  • 4.7. Разбиение строки на лексемы
  • 4.8. Объединение нескольких строк
  • 4.9. Поиск в строках
  • 4.10. Поиск n-го вхождения подстроки
  • 4.11. Удаление подстроки из строки
  • 4.12. Преобразование строки к нижнему или верхнему регистру
  • 4.13. Выполнение сравнения строк без учета регистра
  • 4.14. Выполнение поиска строк без учета регистра
  • 4.15. Преобразование между табуляциями и пробелами в текстовых файлах
  • 4.16. Перенос строк в текстовом файле
  • 4.17. Подсчет числа символов, слов и строк в текстовом файле
  • 4.18. Подсчет вхождений каждого слова в текстовом файле
  • 4.19. Добавление полей в текстовый файл
  • 4.20. Выравнивание текста в текстовом файле
  • 4.21. Замена в текстовом файле последовательностей пробелов на один пробел
  • 4.22. Автозамена текста при изменении буфера
  • 4.23. Чтение текстового файла с разделителями-запятыми
  • 4.24. Использование регулярных выражений для разделения строки
  • Глава 5
    Даты и время
  • 5.0. Введение
  • 5.1. Получение текущей даты и времени
  • 5.2. Форматирование даты/времени в виде строки
  • 5.3. Выполнение вычислений с датами и временем
  • 5.4. Преобразование между часовыми поясами
  • 5.5. Определение номера дня в году
  • 5.6. Определение ограниченных типов значений
  • Глава 6
    Управление данными с помощью контейнеров
  • 6.0. Введение
  • 6.1. Использование vector вместо массивов
  • 6.2. Эффективное использование vector
  • 6.3. Копирование вектора
  • 6.4. Хранение указателей в векторе
  • 6.5. Хранение объектов в списке
  • 6.6. Отображение строк на другие объекты
  • 6.7. Использование хеш-контейнеров
  • 6.8. Хранение объектов в упорядоченном виде
  • 6.9. Хранение контейнеров в контейнерах
  • Глава 7
    Алгоритмы
  • 7.0. Введение
  • 7.1. Перебор элементов контейнера
  • 7.2. Удаление объектов из контейнера
  • 7.3. Случайное перемешивание данных
  • 7.4. Сравнение диапазонов
  • 7.5. Объединение данных
  • 7.6. Сортировка диапазона
  • 7.7. Разделение диапазона
  • 7.8. Выполнение для последовательностей операций над множествами
  • 7.9. Преобразование элементов последовательности
  • 7.10. Написание собственного алгоритма
  • 7.11. Печать диапазона в поток
  • Глава 8
    Классы
  • 8.0. Введение
  • 8.1. Инициализация переменных-членов класса
  • 8.2. Использование функции для создания объектов (шаблон фабрики)
  • 8.3. Использование конструкторов и деструкторов для управления ресурсами (RAII)
  • 8.4. Автоматическое добавление новых экземпляров класса в контейнер
  • 8.5. Гарантия единственности копии переменной-члена
  • 8.6. Определение типа объекта во время выполнения
  • 8.7. Определение, является ли класс объекта подклассом другого класса
  • 8.8. Присвоение каждому экземпляру класса уникального идентификатора
  • 8.9. Создание Singleton-класса
  • 8.10. Создание интерфейса с помощью абстрактного базового класса
  • 8.11. Написание шаблона класса
  • 8.12. Написание шаблона метода класса
  • 8.13. Перегрузка операторов инкремента и декремента
  • 8.14. Перегрузка арифметических операторов и операторов присвоения для работы с классами
  • 8.15. Вызов виртуальной функции родительского класса
  • Глава 9
    Исключения и безопасность
  • 9.0. Введение
  • 9.1. Создание класса исключения
  • 9.2. Создание безопасного при исключениях конструктора
  • 9.3. Создание безопасного при исключениях списка инициализации
  • 9.4. Создание безопасных при исключениях функций-членов
  • 9.5. Безопасное копирование объекта
  • Глава 10
    Потоки и файлы
  • 10.0. Введение
  • 10.1. Вывод выровненного текста
  • 10.2. Форматирование вывода чисел с плавающей точкой
  • 10.3. Написание своих собственных манипуляторов потока
  • 10.4. Создание класса, записываемого в поток
  • 10.5. Создание класса, считываемого из потока
  • 10.6. Получение информации о файле
  • 10.7. Копирование файла
  • 10.8. Удаление или переименование файла
  • 10.9. Создание временного имени файла и временного файла
  • 10.10. Создание каталога
  • 10.11. Удаление каталога
  • 10.12. Чтение содержимого каталога
  • 10.13. Извлечение расширения файла из строки
  • 10.14. Извлечение имени файла из полного пути
  • 10.15. Извлечение пути из полного имени файла
  • 10.16. Замена расширения файла
  • 10.17. Объединение двух путей в один
  • Глава 11
    Наука и математика
  • 11.0. Введение
  • 11.1. Подсчет количества элементов в контейнере
  • 11.2. Поиск наибольшего или наименьшего значения в контейнере
  • 11.3. Вычисление суммы и среднего значения элементов контейнера
  • 11.4. Фильтрация значений, выпадающих из заданного диапазона
  • 11.5. Вычисление дисперсии, стандартного отклонения и других статистических функций
  • 11.6. Генерация случайных чисел
  • 11.7. Инициализация контейнера случайными числами
  • 11.8. Представление динамического числового вектора
  • 11.9. Представление числового вектора фиксированного размера
  • 11.10. Вычисление скалярного произведения
  • 11.11. Вычисление нормы вектора
  • 11.12. Вычисление расстояния между векторами
  • 11.13. Реализация итератора с шагом
  • 11.14. Реализация динамической матрицы
  • 11.15. Реализация статической матрицы
  • 11.16. Умножение матриц
  • 11.17. Вычисление быстрого преобразования Фурье
  • 11.18. Работа с полярными координатами
  • 11.19. Выполнение операций с битовыми наборами
  • 11.20. Представление больших чисел фиксированного размера
  • 11.21. Реализация чисел с фиксированной точкой
  • Глава 12
    Многопоточная обработка
  • 12.0. Введение
  • 12.1. Создание потока
  • 12.2. Обеспечение потокозащищенности ресурсов
  • 12.3. Уведомление одного потока другим
  • 12.4. Однократная инициализация совместно используемых ресурсов
  • 12.5. Передача аргумента функции потока
  • Глава 13
    Интернационализация
  • 13.0. Введение
  • 13.1. Жесткое кодирование строк в коде Unicode
  • 13.2. Запись и чтение чисел
  • 13.3. Запись и чтение дат и времен
  • 13.4. Запись и чтение денежных значений
  • 13.5. Сортировка локализованных строк
  • Глава 14
    XML
  • 14.0. Введение
  • 14.1. Синтаксический анализ простого документа XML
  • 14.2. Работа со строками Xerces
  • 14.3. Синтаксический анализ сложного документа XML
  • 14.4. Манипулирование документом XML
  • 14.5. Проверка документа XML на соответствие определению DTD
  • 14.6. Проверка документа XML на соответствие схеме
  • 14.7. Преобразование документа XML с помощью XSLT
  • 14.8. Вычисление XPath-выражения
  • 14.9. Применение XML для сохранения и восстановления набора объектов
  • Глава 15
    Разные функции
  • 15.0. Введение
  • 15.1. Применение указателей функций для их обратного вызова
  • 15.2. Применение указателей для членов класса
  • 15.3. Обеспечение невозможности модификации аргумента в функции
  • 15.4. Обеспечение невозможности модификации своих объектов в функции-члене
  • 15.5. Написание оператора, не являющегося функцией-членом
  • 15.6. Инициализация последовательности значениями, разделяемыми запятыми
  • Об авторах
  • ***
  • Колофон