1. Темы лекции: Введение в библиотеку Boost.
Практическое задание: Введение в библиотеку Boost.
Тренер: Игорь Шкулипа, к.т.н.
С++ Библиотеки STL и Qt. Занятие 11
2. http://www.slideshare.net/IgorShkulipa 2
Что такое библиотека BOOST C++
Библиотека BOOST C++ - это собрание множества независимых
библиотек, созданных независимыми разработчиками и тщательно
проверенными на различных платформах.
Можно считать, что BOOST C++ - это расширение стандартной
библиотеки C++. Многие вещи, предлагавшиеся для нового стандарта
C++ и отвергнутые комитетом по стандартизации, осели в BOOST.
Использование компонентов BOOST C++ в своих разработках экономит
значительные усилия - особенно если планируется портировать проект
на различные платформы. К примеру, в поисковом движке FAIND
используется несколько частей BOOST C++, в частности - библиотека
для работы с именами файлов (путями) filesystem, и библиотека regex
- регулярные выражения.
3. http://www.slideshare.net/IgorShkulipa 3
Как использовать BOOST в своих проектах
Прежде всего необходимо скачать исходники Boost'а с сайта
www.boost.org. В состав архива входит и документация, и примеры. У
Вас могут возникнуть некоторые затруднения с тем, какая структура
каталогов должна быть после распаковки библиотеки BOOST на диск.
Обратите внимание, что в состав библиотеки Boost не входят
скомпилированные файлы *.lib (или аналогичные). Вы можете либо
скомпилировать их самостоятельно для своей платформы
(соответствующие mak-файлы входят в состав пакета библиотеки
Boost), либо использовать в проектах непосредственно исходные
тексты нужных частей Boost'а.
4. http://www.slideshare.net/IgorShkulipa 4
Состав библиотеки
Библиотеки Boost охватывают следующее:
• Алгоритмы
• Обход ошибок в компиляторах, не соответствующих стандарту
• Многопоточное программирование
• Контейнеры
• Юнит-тестирование
• Структуры данных
• Функциональные объекты
• Обобщённое программирование
• Графы
• Работа с геометрическими данными
• Ввод-вывод
• Межъязыковая поддержка
• Итераторы
• Математические и числовые алгоритмы
• Работа с памятью
• Синтаксический и лексический разбор
• Метапрограммирование на основе препроцессора
• «Умные указатели»
• Обработка строк и текста
• Метапрограммирование на основе шаблонов
5. http://www.slideshare.net/IgorShkulipa 5
Работа со строками и текстом
lexical_cast - преобразование любых типов в строки и из строк в любой тип
(подобно sprintf() и atoi() из библиотеки C).
format - позволяет применять привычную для программистов на C форматную
строку из printf() в потоковых операторах с некоторыми новыми возможностями.
Кстати говоря, семейство функций printf(), несмотря на все свои недостатки
(отсутствие проверки типов аргументов на стеке и невозможность расширения
для новых типов) продолжает интенсивно использоваться благодаря очень
компактному форматированию результатов и наглядности исходного кода. В .NET
Framework, несмотря на всю продвинутость, также не смогли отказаться от
парадигмы printf() - схема работы Console::WriteLine очень напоминает printf,
хотя и вводит для безопасности контроль типов аргументов.
regex - мощная библиотека регулярных выражений. Документация. В поисковом
движке FAIND реализована поддержка расширенных регулярных выражений, в
которых можно работать с грамматическими свойствами слов (приводить к
базовым формам, работать с грамматическими кванторами).
tokenizer - разбиение строки на части по разделителям (лексер). Библиотека C++
LEM содержит шаблонный класс BaseLexer<>, который выполняет разбивку
текста на лексемы и их токенизацию, а также целый набор классов (Iridium),
которые реализуют полный препроцессор C.
6. http://www.slideshare.net/IgorShkulipa 6
Контейнеры
• array - массив постоянного размера (в отличие от std::vector). Среди
контейнерных классов библиотеки LEM есть аналогичные.
• dynamic_bitset - версия std::bitset, которая может динамически
менять размер.
• graph - реализация концепции графов
• multi_array - реализация многомерных массивов.
• property_map
• multi_index
7. http://www.slideshare.net/IgorShkulipa 7
Функциональные объекты и адаптеры
• bind и mem_fn - адаптеры для функций, объектов и методов и
указателей на них
• compose - адаптеры STL для использования их в функциональном
программировании
• function - функциональные объекты-обертки
• functional - улучшенные адаптеры функциональных объектов
• lambda - безымянная функция (абстракция функционального
программирования)
• ref - библиотека утилит для передачи ссылок в функциональные
объекты
• signals - реализация сигналов и слотов (другое название этой
парадигмы - делегаты).
10. http://www.slideshare.net/IgorShkulipa 10
Математические и числовые функции
• math - некоторые реализации теоретической математики в виде шаблонов.
Реализация многих численных методов есть в математическом разделе
библиотеки LEM.
• integer - некоторые операции с целыми числами реализованные в виде
шаблонов, работа с битовыми масками и пр.
• math/common_factor - нахождение наибольшего общего делителя (GCD) и
наименьшего общего множителя (LCM) для двух чисел. Реализации как времени
исполнения, так и компиляции.
• math/octonion - реализация октонионов
• math/quaterion - реализация квартерионов
• math/special_functions - некоторые специальные математические функции
типа гиперболического синуса. Требуются для реализации октонионов и
квартарионов. В математическом разделе библиотеки LEM есть набор численных
методов вычисления многих специальных функций, а также тестовые
программы.
• random - генераторы псевдослучайных чисел и средства для получения
различных распределений вероятности. Много различных генераторов
псевдослучайных чисел и тестовых программ для проверки их качества
реализовано в математическом разделе библиотеки LEM.
• rational - реализация рациональных чисел (дробей).
• uBLAS - основная линейная алгебра для плотных, упакованных и разряженных
матриц. Некоторые численные алгоритмы линейной алгебры реализованы в
математическом разделе библиотеки LEM.
11. http://www.slideshare.net/IgorShkulipa 11
Структуры данных
• any - безопасный общий контейнер для единичного значения любого
типа.
• compressed_pair - то же, что и std::pair<>, но в случае, если один из
аргументов пустой класс, то оптимизирует пару по размеру.
• tuple - реализация функций, возвращающих несколько значений.
• variant - контейнер для хранения единственного объекта
произвольного типа.
12. http://www.slideshare.net/IgorShkulipa 12
Работа с памятью
• pool - управление памятью в виде пулов
• smart_ptr - "Умные" указатели.
• utility - определяет базовый класс noncopyable для
некопируемых классов, а также шаблоны next() и prior() для
итераторов, checked_delete() и checked_array_delete() для
удаления указателя и указателя на массив с проверкой типов
на этапе компиляции, шаблон addressof() возвращающий
адрес объекта. Шаблон tie() создан для более удобной
замены std::make_pair(). А также содержит шаблоны для
реализации идиомы Base-from-Member.
13. http://www.slideshare.net/IgorShkulipa 13
Прочее
• filesystem - работа с файловой системой, путями, именами файлов.
• conversion - помимо lexical_cast<>, содержит polymorphic_cast<> и
polymorphic_downcast<> для безопасного полиморфного
преобразования типов, а так же numeric_cast<> для безопасного
преобразования числовых типов (например из double в short).
• crc - вычисление контрольной суммы.
• date_time - работа с датой, временем и промежутками времени.
• timer - таймеры, отображение progress bar на стандартный вывод.
• utility - описано выше.