logo

Расширение библиотеки STL для С++. Наборы и итераторы (+ CD)

№ 1052706
Автор: М. Уилсон, Год издания: 2008
Нет в продаже
Заявка принята

В книге известный специалист по языку C++ Мэтью Уилсон демонстрирует, как выйти за пределы стандарта C++ и расширить стандартную библиотеку шаблонов, применив лежащие в ее основе принципы к различным API и нестандартным наборам, чтобы получить более эффективные, выразительные, гибкие и надежные программы.
Автор описывает передовые приемы, которые помогут вам в совершенстве овладеть двумя важными темами: адаптация API библиотек и операционной системы к STL-совместимым наборам и определение нетривиальных адаптеров итераторов. Это даст вам возможность в полной мере реализовать заложенные в STL возможности для написания эффективных и выразительных программ. На реальных примерах Уилсон иллюстрирует ряд важных концепций и технических приемов, позволяющих расширить библиотеку STL в таких направлениях, о которых ее создатели даже не думали, в том числе: наборы, категории ссылок на элементы, порча итераторов извне и выводимая адаптация интерфейса.
Эта книга станет неоценимым подспорьем для любого программиста на C++, хотя бы в минимальной степени знакомого с STL.
На прилагаемом компакт-диске находится обширная коллекция открытых библиотек, созданных автором. Также включено несколько тестовых проектов и три дополнительных главы.

Фотографии покупателей
Название в оригинале Extended STL, Volume 1: Collections and Iterators
Издательство BHV
Год издания 2008
Страниц 608
Переплет Мягкая обложка
Приложение Прилагается CD
Формат 70х100/16 (170х240 мм, увеличенный)
ISBN 978-5-9775-0196-5
Вес 570 г
Возрастные ограничения 16+
Изготовитель ООО "Издательство "БХВ-Петербург". 194100, РФ, г. Санкт-Петербург, пр-т Лесной, 37/1Б
Импортер ООО «Приносим радость», 220073, г. Минск, ул. Скрыганова, д. 14, каб. 36.
Доставка Самовывоз — бесплатно.
Курьером по Минску — 9,99 р., бесплатно при заказе от 100,00 р.
Срок доставки устанавливается после оформления заказа.
Подробнее о видах доставки, доступных в вашем населенном пункте,  — в разделе «Виды доставки».
Все параметры

Содержание

  • Предисловие
    • Цели
    • Предмет обсуждения
    • Организация книги
    • Дополнительные материалы
    • Благодарности
    • Об авторе
    • Пролог
    • Дихотомия объекта исследования
    • Принципы программирования в системе UNIX
    • Семь признаков успешных библиотек на C++
    • Эффективность
    • Понятность и прозрачность
    • Выразительные возможности
    • Надежность
    • Гибкость
    • Модульность
    • Переносимость
    • Поиск компромиссов: довольство тем, что имеешь, диалектизм и идиомы
    • Примеры библиотек
    • STLSoft
    • Подпроекты STLSoft
    • Boost
    • Open)RJ
    • Pantheios
    • recls
    • Типографские соглашения
    • Шрифты
    • . . . сравни
    • Предварительное вычисление концевого итератора
    • Квалификация типа вложенного класса
    • Содержание NULL
    • Имена параметров шаблона
    • Имена типов)членов и типов в области видимости пространства имен ...
    • Соглашения о вызове
    • Концевые итераторы
    • Пространство имен для имен из стандартной библиотеки C
    • Адаптеры классов и адаптеры экземпляров
    • Имена заголовочных файлов
  • Часть I. Основы
    • Глава 1. Стандартная библиотека шаблонов
      • 1.1.Основные понятия
      • 1.2.Контейнеры
        • 1.2.1.Последовательные контейнеры
        • 1.2.2.Ассоциативные контейнеры
        • 1.2.3.Непрерывность памяти
        • 1.2.4.swap
      • 1.3. Итераторы
        • 1.3.1.Итераторы ввода
        • 1.3.2.Итераторы вывода
        • 1.3.3.Однонаправленные итераторы
        • 1.3.4.Двунаправленные итераторы
        • 1.3.5.Итераторы с произвольным доступом
        • 1.3.6.Оператор выбора члена
        • 1.3.7.Предопределенные адаптеры итераторов
      • 1.4.Алгоритмы
      • 1.5.Объекты)функции
      • 1.6.Распределители
    • Глава 2. Концепции расширения STL, или КакSTL ведет себя при встрече с реальным миром
      • 2.1 .Терминология
      • 2.2. Наборы
        • 2.2.1. Изменчивость
      • 2.3. Итераторы
        • 2.3.1.Изменчивость
        • 2.3.2.Обход
        • 2.3.3.Определение характеристик на этапе компиляции
        • 2.3.4.Категория ссылок на элементы
        • 2.3.5.Общее и независимое состояние
        • 2.3.6.Не пересмотреть ли классификацию итераторов?
      • Содержание
    • Глава 3. Категории ссылок на элементы
      • 3.1.Введение
      • 3.2.Ссылки в C++
        • 3.2.1. Ссылки на элементы STL)контейнеров
      • 3.3. Классификация ссылок на элементы
        • 3.3.1.Перманентные
        • 3.3.2.Фиксированные
        • 3.3.3.Чувствительные
        • 3.3.4.Недолговечные
        • 3.3.5.Временные по значению
        • 3.3.6.Отсутствующие
      • 3.4. Использование категорий ссылок на итераторы
        • 3.4.1.Определение категории на этапе компиляции
        • 3.4.2.Как компилятор может помочь избежать неопределенного поведения итератора
      • 3.5.Определение оператора operator)>()
      • 3.6.Еще о категориях ссылок на элементы
    • Глава 4. Забавная безвременная ссылка
    • Глава 5. Принцип DRY SPOT
      • 5.1. Принцип DRY SPOT в C++
        • 5.1.1.Константы
        • 5.1.2.Оператор dimensionof()
        • 5.1.3.Порождающие функции
      • 5.2. Когда в C++ приходится нарушать принцип DRYSPOT
        • 5.2.1.Родительские классы
        • 5.2.2.Типы значений, возвращаемых функциями
      • 5.3. Замкнутые пространства имен
    • Глава 6. Закон дырявых абстракций
    • Глава 7. Программирование по контракту
      • 7.1.Виды контроля
      • 7.2.Механизмы контроля
    • Глава 8. Ограничения
      • 8.1.Поддержка со стороны системы типов
      • 8.2.Статические утверждения
      • Содержание
    • Глава 9. Прокладки
      • 9.1.Введение
      • 9.2.Основные прокладки
        • 9.2.1.Атрибутные прокладки
        • 9.2.2.Конвертирующие прокладки
      • 9.3. Составные прокладки
        • 9.3.1. Прокладки строкового доступа
    • Глава 10. Утка и гусь, или Занимательные основы частичного структурного соответствия
      • 10.1. Соответствие
        • 10.1.1.Соответствие по имени
        • 10.1.2.Структурное соответствие
        • 10.1.3.Утка и гусь
      • 10.2. Явное семантическое соответствие
        • 10.2.1.Концепции
        • 10.2.2.Пометка с помощью типов"членов
        • 10.2.3.Прокладки
      • 10.3. Пересекающееся соответствие
    • Глава 11. Идиома RAII
      • 11.1.Изменчивость
      • 11.2.Источник ресурса
    • Глава 12. Инструменты для работы с шаблонами
      • 12.1 .Характеристические классы
        • 12.1.1.Класс base_type_traits
        • 12.1.2.Класс sign_traits
        • 12.1.3.Свойства типа: мини"характеристики
        • 12.1.4.Класс is_integral_type
        • 12.1.5.Класс is_signed_type
        • 12.1.6.Класс is_fundamental_type
        • 12.1.7.Класс is_same_type
      • 12.2. Генераторы типов
        • 12.2.1. Классstlsoft::allocator_selector
      • 12.3. Истинные typedef
    • Глава 13. Выводимая адаптация интерфейса: адаптации типов с неполными интерфейсами на этапе компиляции
      • 13.1. Введение
      • 13.2.Адаптация типов с неполными интерфейсами
      • 13.3.Адаптация неизменяемых наборов
      • 13.4.Выводимая адаптация интерфейса
        • 13.4.1.Выбор типа
        • 13.4.2.Распознавание типа
        • 13.4.3.Исправление типа
      • 13.5. Применение МА к диапазону
    • Глава 14. Гипотеза Хенни, или Шаблоны атакуют!
    • Глава 15. Независимые автономии друзей equal()
      • 15.1.Опасайтесь неправильного использования функций"друзей, не являющихся членами
      • 15.2.Наборы и их итераторы
    • Глава 16. Важнейшие компоненты
      • 16.1.Введение
      • 16.2.Класс auto_buffer
        • 16.2.1.Это не контейнер!
        • 16.2.2.Интерфейс класса
        • 16.2.3.Копирование
        • 16.2.4.Воспитанные распределители идут последними
        • 16.2.5.Метод swap()
        • 16.2.6.Производительность
      • 16.3. Класс filesystem_traits
        • 16.3.1.Типы"члены
        • 16.3.2.Работа со строками
        • 16.3.3.Работа с именами из файловой системы
        • 16.3.4.Операции с состоянием объектов файловой системы
        • 16.3.5.Операции управления файловой системой
        • 16.3.6.Типы возвращаемых значений и обработка ошибок
      • 16.4. Классfile_path_buffer
        • 16.4.1.Класс basic_??
        • 16.4.2.UNIX и PATH_MAX
        • 16.4.3.Windows и MAX_PATH
        • 16.4.4.Использование буферов
      • 16.5.Класс scoped_handle
      • 16.6.Функция dl_call()
  • Часть II. Наборы
    • Глава 17. Адаптация API glob
      • 17.1. Введение
        • 17.1.1.Мотивация
        • 17.1.2.API glob
      • 17.2.Анализ длинной версии
      • 17.3.Класс unixstl::glob_sequence
        • 17.3.1.Открытый интерфейс
        • 17.3.2.Типы)члены
        • 17.3.3.Переменные)члены
        • 17.3.4.Флаги
        • 17.3.5.Конструирование
        • 17.3.6.Размер и доступ к элементам
        • 17.3.7.Итерация
        • 17.3.8.Метод init_glob_()
      • 17.4.Анализ короткой версии
      • 17.5.Резюме
    • Глава 18. Интерлюдия: конфликты в конструкторах и дизайн, который не то чтобы плох, но мало подходит для беспрепятственного развития
    • Глава 19. Адаптация API opendir/readdir
      • 19.1. Введение
        • 19.1.1.Мотивация
        • 19.1.2.API opendir/readdir
      • 19.2.Анализ длинной версии
      • 19.3.Класс unixstl::readdir_sequence
        • 19.3.1 .Типы и константы)члены
        • 19.3.2.Конструирование
        • 19.3.3.Методы, относящиеся к размеру и итерированию
        • 19.3.4.Методы доступа к атрибутам
        • 19.3.5.const_iterator, версия 1
        • 19.3.6.Использование версии 1
        • 19.3.7.const_iterator, версия 2: семантика копирования
        • 19.3.8.operator++()
        • 19.3.9.Категория итератора и адаптируемые типы)члены
        • 19.3.10.operator)>()
        • 19.3.11.Поддержка флагов fullPath и absolutePath
      • 19.4. Альтернативные реализации
        • 19.4.1.Хранение элементов в виде мгновенного снимка
        • 19.4.2.Хранение элементов в виде итератора
      • 19.5. Резюме
    • Глава 20. Адаптация API FindFirstFile/FindNextFile
      • 20.1. Введение
        • 20.1.1.Мотивация
        • 20.1.2.API FindFirstFile/FindNextFile
      • 20.2. Анализ примеров
        • 20.2.1.Длинная версия
        • 20.2.2.Короткая версия
        • 20.2.3.Точки монтирования и бесконечная рекурсия
      • 20.3.Проектирование последовательности
      • 20.4.Класс winstl::basic_findfile_sequence
        • 20.4.1.Интерфейс класса
        • 20.4.2.Конструирование
        • 20.4.3.Итерация
        • 20.4.4.Обработка исключений
      • 20.5. Класс winstl::basic_findfile_sequence_const_iterator
        • 20.5.1.Конструирование
        • 20.5.2.Методfind_first_file_()
        • 20.5.3.operator++()
      • 20.6.Класс winstl::basic_findfile_sequence_value_type
      • 20.7.Прокладки
      • 20.8.А где же шаблонные прокладки и конструкторы?
      • 20.9.Резюме
      • 20.10. Еще об обходе файловой системы с помощью recls
    • Глава 21. Интерлюдия: о компромиссе между эффективностью и удобством использования: обход каталогов на FTPKсервере
      • 21.1.Класс inetstl::basic_findfile_sequence
      • 21.2.Класс inetstl::basic_ftpdir_sequence
    • Глава 22. Перебор процессов и модулей
      • 22.1.Характеристики набора
      • 22.2.Класс winstl::pid_sequence
        • 22.2.1.Простые реализации на основе композиции
        • 22.2.2.Получение идентификаторов процессов
        • 22.2.3.Работа без поддержки исключений
      • 22.3.Класс winstl::process_module_sequence
      • 22.4.Перебор всех модулей в системе
      • 22.5.Исключение системных псевдопроцессов
      • 22.6.Когда заголовочные файлы API отсутствуют
      • 22.7.Резюме
    • Глава 23. Числа Фибоначчи
      • 23.1. Введение
      • 23.2.Последовательность чисел Фибоначчи
      • 23.3.Последовательность чисел Фибоначчи как STL)последовательность
        • 23.3.1.Интерфейс бесконечной последовательности
        • 23.3.2.Заключим контракт
        • 23.3.3.Ане изменить ли тип значения?
        • 23.3.4.Ограничивающий тип
        • 23.3.5.Возбуждать ли исключение std::overflow_error?
      • 23.4.Трудности понимания
      • 23.5.Определение конечных границ
        • 23.5.1.Так все)таки итераторы?
        • 23.5.2.Диапазон, ограниченный конструктором
        • 23.5.3.Истинные typedef`ы
      • 23.6. Резюме
    • Глава 24. Адаптация семейства MFCKконтейнеров САггау
      • 24.1. Введение
      • 24.2. Мотивация
      • 24.3.Эмуляция std::vector
      • 24.4.Размышления над проектом
        • 24.4.1.Семейство контейнеров)массивов в MFC
        • 24.4.2.Класс CArray_traits
        • 24.4.3.Проектирование адаптеров массивов
        • 24.4.4.Абстрактное манипулирование состоянием
        • 24.4.5.Идиома копирования с обменом
        • 24.4.6.Композиция интерфейса набора
        • 24.4.7.Педагогический подход
      • 24.5.Интерфейс класса mfcstl::CArray_adaptor_base
      • 24.6.Класс mfcstl::CArray_cadaptor
        • 24.6.1.Объявление шаблона и наследование
        • 24.6.2.Применение паттерна CRTP
        • 24.6.3.Конструирование
        • 24.6.4.operator []()
      • 24.7.Класс mfcstl::CArray_iadaptor
      • 24.8.Конструирование
      • 24.9.Распределитель памяти
      • 24.10.Методы доступа к элементам
      • 24.11.Итерация
        • 24.11.1.Методы begin() и end()
        • 24.11.2.Методы rbegin()and rend()
      • 24.12. Размер
        • 24.12.1. Оптимизация выделения памяти
      • 24.13. Емкость
      • 24.14. Сравнение
      • 24.15. Модификаторы
        • 24.15.1.Метод push_back()
        • 24.15.2.Метод assign() 311
        • 24.15.3.Методы pop_back() и clear()
        • 24.15.4.Метод erase()
        • 24.15.5.Метод insert()
        • 24.16. Присваивание и метод swap()
          • 24.16.1. Метод swap()
      • 24.17.Резюме
      • 24.18.На компакт)диске
    • Глава 25. Карта окружающей местности
      • 25.1.Введение
      • 25.2.Мотивация
      • 25.3.getenv(), putenv(), setenv()/unsetenv() и environ
      • 25.4.Класс platformstl::environment_variable_traits
      • 25.5.Планирование интерфейса
      • 25.6.Поиск по имени
        • 25.6.1. Вариант 1: возврат фиксированной/недолговечной ссылки накэшированный объект с актуальным значением
        • 25.6.2. Вариант 2: возврат фиксированной ссылки на кэшированный объект, содержащий значение на момент снимка
        • 25.6.3. Вариант 3: возврат фиксированной ссылки на кэшированный объект с актуальным значением
        • 25.6.4. Вариант 4: возврат временной по значению ссылки на актуальное значение
        • 25.6.5. Еще раз о поиске по имени
      • 25.7.Вставка, изменение и удаление значений по имени
      • 25.8.Итерация
        • 25.8.1.Версия 1: непрерывный итератор
        • 25.8.2.Версия 2: двунаправленный итератор
        • 25.8.3.Версия 3: мгновенный снимок
        • 25.8.4.Версия 4: снимокс подсчетом ссылок
      • 25.9. Окончательная реализация итерации
        • 25.9.1.Изменяемый снимок?
        • 25.9.2.Создание снимка
        • 25.9.3.Вложенный класс const_iterator
        • 25.9.4.Метод insert()
        • 25.9.5.Метод erase()
        • 25.9.6.Методы operator []() и lookup()
        • 25.9.7.Вложенный класс snapshot
      • 25.10.Гетерогенные категории ссылок?
      • 25.11.Метод size() и индексирование числом
      • 25.12.Резюме
      • 25.13.На компакт)диске
    • Глава 26. Путешествие по ZKплоскости - туда и обратно
      • 26.1.Пролог
      • 26.2.Введение
      • 26.3.Версия 1: однонаправленная итерация
        • 26.3.1.Класс zorder_iterator, версия 1
        • 26.3.2.Класс window_peer_sequence, версия 1
      • 26.4.Версия 2: двунаправленная итерация
      • 26.5.Учет внешних изменений
        • 26.5.1. Класс stlsoft::external_iterator_invalidation
      • 26.6.Класс winstl::child_window_sequence
      • 26.7.Блюз, посвященный двунаправленным итераторам
        • 26.7.1.О стражах end()
        • 26.7.2.Убийственное двойное разыменование
        • 26.7.3.Когда двунаправленный итератор не является однонаправленным, но оказывается обратимым и клонируемым..
      • 26.8. winstl::zorder_iterator: итератор, обратный самому себе
        • 26.8.1.Характеристический класс для zorder_iterator
        • 26.8.2.Шаблон zorder_iterator_tmpl<>
        • 26.8.3.Семантика обратной итерации
      • 26.9. Завершающие штрихи в реализации последовательностей равноправных окон
      • 26.10.Резюме
      • 26.11.Еще о Z)плоскости
    • Глава 27. Разбиение строки
      • 27.1.Введение
      • 27.2.Функция strtok()
      • 27.3.Класс SynesisSTL::StringTokeniser
      • 27.4.Случаи, когда применяется разбиение строки
      • 27.5.Альтернативные средства разбиения строк
        • 27.5.1.Функция strtok_r()
        • 27.5.2.Библиотека IOStreams
        • 27.5.3.Функция stlsoft::find_next_token()
        • 27.5.4.Класс boost::tokenizer
      • 27.6. Класс stlsoft::string_tokeniser
        • 27.6.2.Выбор категории
        • 27.6.3.Класс stlsoft::string_tokeniser_type_traits
        • 27.6.4.Класс stlsoft::string_tokeniser_comparator
      • 27.7.Тестирование
        • 27.7.1.Одиночный символ)разделитель
        • 27.7.2.Разделитель)строка
        • 27.7.3.Сохранение пустых лексем
        • 27.7.4.Копировать или сослаться: поговорим о представлениях ..
      • 27.8. Немного о политиках
        • 27.8.1.Переработка параметров шаблона с помощью наследования
        • 27.8.2.Шаблоны)генераторы типов
        • 27.8.3.Как быть с гипотезой Хенни?
      • 27.9.Производительность
      • 27.10.Резюме
    • Глава 28. Адаптация энумераторов COM
      • 28.1.Введение
      • 28.2.Мотивация
        • 28.2.1.Длинная версия
        • 28.2.2.Короткая версия
      • 28.3. Энумераторы COM
        • 28.3.1.Метод IEnumXXXX::Next()
        • 28.3.2.Метод IEnumXXXX::Skip()
        • 28.3.3.Метод IEnumXXXX::Reset()
        • 28.3.4.Метод IEnumXXXX::Clone()
        • 28.3.5.Различные типы значений
      • 28.4.Анализ длинной версии
      • 28.5.Класс comstl::enumerator_sequence
        • 28.5.1.Открытый интерфейс
        • 28.5.2.Типы и константы)члены
        • 28.5.3.Политики значений
        • 28.5.4.Переменные)члены
        • 28.5.5.Конструирование
        • 28.5.6.Методы итерации
        • 28.5.7.Методы итератора и корректность относительно const
        • 28.5.8.Нарушена семантика значения?
      • 28.6. Класс comstl::enumerator_sequence::iterator
        • 28.6.1.Конструирование
        • 28.6.2.Методы итерации
        • 28.6.3.Метод equal()
      • 28.7. Класс comstl::enumerator_sequence:: iterator:: enumeration_ context
        • 28.7.1.Зачем нужен контекст обхода?
        • 28.7.2.Определение класса
        • 28.7.3.Конструирование
        • 28.7.4.Вспомогательные методы для поддержки итераторов
        • 28.7.5.Инвариант
      • 28.8. Политики клонирования итераторов
        • 28.8.1.Класс comstl::input_cloning_policy
        • 28.8.2.Класс comstl::forward_cloning_policy
        • 28.8.3.Класс comstl::cloneable_cloning_policy
      • 28.9. Выбор политики клонирования по умолчанию: применение принципа наименьшего удивления
        • 28.9.1. Метод empty()
      • 28.10. Резюме
        • 28.10.1.Почему по умолчанию не указывать однонаправленные итераторы?
        • 28.10.2.Почему по умолчанию не указывать итераторы ввода? ....
        • 28.10.3.Почему не ограничиться порциями размером 1? 444
        • 28.10.4.Почему не воспользоваться стандартным контейнером?...
      • 28.11. Следующий шаг
    • Глава 29. Интерлюдия: исправление мелких упущений, касающихся выведения типаKчлена
    • Глава 30. Адаптация наборов COM
      • 30.1.Введение
      • 30.2.Мотивация
        • 30.2.1.Длинная версия
        • 30.2.2.Короткая версия
      • 30.3. Класс comstl::collection_sequence
        • 30.3.1.Открытый интерфейс
        • 30.3.2.Типы и константы)члены
        • 30.3.3.Конструирование
        • 30.3.4.Итерация: чистое применение грязного трюка
        • 30.3.5.Замечание по поводу метода size()
      • 30.4.Политики получения энумератора
      • 30.5.Резюме
    • Глава 31. Ввод/вывод с разнесением и сбором
      • 31.1.Введение
      • 31.2.Ввод/выводс разнесением и сбором
      • 31.3.API ввода/вывода с разнесением и сбором
        • 31.3.1.Линеаризация с помощью COM)потоков
        • 31.3.2.Класс platformstl::scatter_slice_sequence - рекламный трейлер
      • 31.4. Адаптация класса ACE_Message_Queue
        • 31.4.1.Класс acestl::message_queue_sequence, версия 1
        • 31.4.2.Класс acestl::message_queue_sequence::iterator
      • 31.5. О том, как садиться на ежа
        • 31.5.1.Кэп, эта посудина не может идти быстрее!
        • 31.5.2.Класс acestl::message_queue_sequence, версия 2
        • 31.5.3.Специализация стандартной библиотеки
        • 31.5.4.Производительность
    • 31.6. Резюме
    • Глава 32. Изменение типа возвращаемого значения в зависимости от аргументов
      • 32.1.Введение
      • 32.2.Одолжим рубину Ruby
      • 32.3.Двойственная семантика индексирования на C++
      • 32.4.Достижение обобщенной совместимости с помощью прокладок строкового доступа
      • 32.5.Как распознать целочисленность?
      • 32.6. Выбор типа возвращаемого значения и перегрузки
        • 32.6.1. Запрет индексов в виде целого со знаком
      • 32.7. Резюме
    • Глава 33. Порча итератора извне
      • 33.1.Когерентность элемента и интерфейса
      • 33.2.Элементы управления Windows ListBox и ComboBox
        • 33.2.1.Гонка при выборке?
        • 33.2.2.Классы listbox_sequence и combobox_sequence в библиотеке WinSTL
      • 33.3. Перебор разделов и значений реестра
        • 33.3.1.Так в чем проблема?
        • 33.3.2.Библиотека WinSTL Registry
        • 33.3.3.Обработка порчи итератора извне
        • 33.3.4.Класс winstl::basic_reg_key_sequence
      • 33.4.Резюме
      • 33.5.На компакт)диске
  • Часть III. Итераторы
    • Глава 34.Усовершенствованный класс ostream_iterator
      • 34.1.Введение
      • 34.2.Класс std::ostream_iterator
        • 34.2.1. Тип разности void
      • 34.3. Класс stlsoft::ostream_iterator
        • 34.3.1. Прокладки, что же еще
        • 34.3.2.Безопасная семантика
        • 34.3.3.Совместимость с std::ostream_iterator
        • 34.3.4.Нарушение принципов проектирования?
      • 34.4.Определение операторов вставки в поток
      • 34.5.Резюме
    • Глава 35. Интерлюдия: запрет бессмысленного синтаксиса итератора вывода с помощью паттерна Dereference Proxy
      • 35.1. Класс stlsoft::ostream_iterator::deref_proxy
    • Глава 36. Трансформирующий итератор
      • 36.1.Введение
      • 36.2.Мотивация
        • 36.2.1.Использованиеstd::transform()
        • 36.2.2.Использование трансформирующего итератора
      • 36.3. Определение адаптеров итераторов
        • 36.3.1.Порождающие функции
        • 36.3.2.Тип значения
      • 36.4. Класс stlsoft: :transform_iterator
        • 36.4.1.Версия 1
        • 36.4.2.Конструирование
        • 36.4.3.Операторы инкремента и декремента и арифметические операции над указателями
        • 36.4.4.Сравнение и арифметические операции
        • 36.4.5.А проблема в том, что
        • 36.4.6.Версия 2
        • 36.4.7.Класс stlsoft: :transf orm_iterator
      • 36.5.Составные трансформации
      • 36.6.Нет ли здесь нарушения принципа DRYSPOT?
        • 36.6.1.Использование typedef и не)временных объектов)функций
        • 36.6.2.Использование гетерогенных итераторов и алгоритмов ....
        • 36.6.3.Носите, ноаккуратно
      • 36.7.Щепотка последовательностей помогает излечить…?
      • 36.8.Резюме
      • 36.9.На компакт)диске
    • Глава 37. Интерлюдия: береженого бог бережет, или О выборе имен
    • Глава 38. Итератор селекции членов
      • 38.1. Введение
      • 38.2. Мотивация
        • 38.2.1. Алгоритм std::accumulate()
      • 38.3.Класс stlsoft: :member_selector_iterator
      • 38.4.Беды порождающей функции
        • 38.4.1.Неизменяющий доступ к не)константному массиву
        • 38.4.2.Неизменяющий доступ к константному массиву
        • 38.4.3.Изменяющий доступ к не)константному массиву
        • 38.4.4.Неизменяющий доступ к не)константному набору с итераторами типа класса
        • 38.4.5. Неизменяющий доступ к константному набору с итераторами типа класса
        • 38.4.6.Изменяющий доступ к набору с итераторами типа класса
        • 38.4.7.Выбор константных членов
      • 38.5.Резюме
      • 38.6.На компакт)диске
    • Глава 39. Конкатенация СKстрок
      • 39.1.Мотивация
      • 39.2.Негибкая версия
      • 39.3.Класс stlsoft::cstring_concatenator_iterator
      • 39.4.Порождающие функции
      • 39.5.Резюме
      • 39.6.На компакт)диске
    • Глава 40. Конкатенация строковых объектов
      • 40.1.Введение
      • 40.2.Класс stlsoft::string_concatenator_iterator
      • 40.3.Гетерогенные строковые типы
      • 40.4.Однако
        • 40.4.1.Возможность присваивания
        • 40.4.2.Висячие ссылки
        • 40.4.3.Решение
      • 40.5. Резюме
    • Глава 41. Характеристики адаптированных итераторов
      • 41.1.Введение
      • 41.2.Класс stlsoft::adapted_iterator_traits
        • 41.2.1. iterator_category
        • 41.2.2.value_type
        • 41.2.3.difference_type
        • 41.2.4.pointer
        • 41.2.5.reference
        • 41.2.6. const_pointer и const_reference
        • 41.2.7 effective_reference и effective_const_reference
        • 41.2.8.effective_pointer и effective_const_pointer
        • 41.2.9.Использование характеристического класса
      • 41.3.Резюме
      • 41.4.На компакт)диске
    • Глава 42. Фильтрующая итерация
      • 42.1.Введение
      • 42.2.Неправильная версия
      • 42.3.Итераторы)члены определяют диапазон
      • 42.4.Ну и что будем делать. .. ?
      • 42.5.Класс stlsoft::filter_iterator
        • 42.5.1.Семантика однонаправленных итераторов
        • 42.5.2.Семантика двунаправленных итераторов
        • 42.5.3.Семантика итераторов с произвольным доступом
      • 42.6.Ограничение категории итераторов
      • 42.7.Резюме
      • 42.8.На компакт)диске
    • Глава 43. Составные адаптеры итераторов
      • 43.1.Введение
      • 43.2.Трансформация фильтрующего итератора
        • 43.2.1. Порождающая функция
      • 43.3.Фильтрация трансформирующего итератора
      • 43.4.И нашим, и вашим
      • 43.5.Резюме
  • Эпилог
  • Библиография
Cреди ваших покупок нет этого товара. Вы можете оставлять отзывы только к товарам, которые покупали на OZ.by
Напишите отзыв о книге или задайте вопрос
  • Оставить отзыв
  • Задать вопрос
Ваша оценка
ужасно
плохо
нормально
хорошо
отлично
Вам запрещено оставлять комментарии

Вход

В течение нескольких секунд вам придёт SMS с одноразовым кодом для входа. Если ничего не пришло — отправьте код ещё раз.
Получите доступ к персональным скидкам и акциям, ускорьте оформление заказов.
Войдите с помощью своего профиля

Регистрация

Введите номер вашего мобильного телефона:
Войдите с помощью электронной почты или номера телефона
Войдите с помощью своего профиля

Восстановление пароля

Укажите адрес электронной почты, который вы использовали при регистрации
Нужна помощь? Звоните 695-25-25 (МТС, A1, life:) или напишите нам

Восстановление пароля

Инструкции по восстановлению пароля высланы на 
Нужна помощь? Звоните 695-25-25 (МТС, A1, life:) или напишите нам

Согласие на обработку персональных данных

Подтверждаю ознакомление с целями обработки персональных данных, разъяснением прав, связанных с обработкой и порядком их реализации, и даю согласие на обработку персональных данных, в соответствии с  Политикой в отношении обработки персональных данных

Отказываюсь