Обзор библиотеки Boost
Мы рассмотрим несколько полезных модулей библиотеки Boost,
Умные указатели
Все рассмотренные в прошлом семестре <<умные> указатели представлены в библиотеке Boost.
-
scoped_ptrиscoped_array, -
shared_ptrиshared_array, -
weak_ptr--- ссылка на объект, который находится под управлениемshared_ptr. Следует отметить, что через этот указатель нельзя обратиться к объекту напрямую --- можно только создатьshared_ptr, указывающий на этот объект, с помощью методаlock()--- если объект уже уничтожен, то возвращается пустойshared_ptr. -
intrusive_ptr<T>--- аналогshared_ptr<T>; требует, чтобы у типаTбыли определены методы intrusive_ptr_add_ref() и intrusive_ptr_release(). Уintrusive_ptr, по крайней мере, два преимущества передshared_ptr:- размер объекта
intrusive_ptrсовпадает с размером указателя, - объекта
intrusive_ptr<T>можно проинициализировать от произвольногоT*.
- размер объекта
Версия <<умного>> указателя с суффиксом _array управляет временем жизни массива, а не
отдельного объекта
Строковые алгоритмы
Строковые алгоритмы Boost являются обобщением и расширением методов строковых классов STL и алгоритмов STL, предназначенных для работы с последовательностями.
- Преобразование регистра:
to_upper(input)иto_lower(iput). - Удаление пробельных символов в начале и в конце строки
trim_left[_if](input [, predicate]),trim_right[_if](input[, predicate]иtrim[_if](input[, predicate]). - Предикаты:
[i]strarts_with(range1, range2 [, comp]),[i]ends_with(range1, range2 [, comp]),[i]contains(range1, range2 [, comp]),[i]equals(range1, range2 [, comp]),[i]lexicographical_compare(range1, range2 [, comp]). - Алгоритмы поиска:
[i]find_first(input, search),[i]find_last(input, search),[i]find_nth(input, search),[i]find_regex(input, regex). - Алгоритмы замены:
[i][replace|erase]_first(input, search [, format]),[i][replace|erase]_last(input, search [, format]),[i][replace|erase]_nth(input, search [, format]),[i][replace|erase]_regex(input, regex [,format]). -
split[_regex](result, input [, predicate | regex])иjoin(input, separator). - Функторы-классификаторы символов
Существуют версии этих алгоритмов с суффиксом _copy, которые выполняют те же действия над копией входной строки и возвращают ее.
Итераторы
Библиотека итераторов Boost расширяет концепцию итераторов STL.
-
counting_iterator<Incrementable>--- реализует концепцию <<ленивой>> последовательности --- итератор получает новое значение, выполняя операциюIncrementable::operator++над обернутым объектом. -
filter_iterator<Predicate, Iterator>--- итерирует подмножество значений обернутого итератора. -
function_output_iterator<UnaryFunction>--- преобразует записываемое в итератор значение с помощью указанной функции. -
indirect_iterator<Iterator>--- итерирует объекты, на которые указывают значения другого итератора. -
permutation_iterator<ElementIterator, IndexIterator>--- итерирует по перестановкам значений итераторя ElementIterator, задаваемым итератором IndexIterator. -
reverse_iterator<Iterator>--- расширение стандартного обратного итератора. -
shared_container_iterator<Container>--- продлевает жизнь захваченному контейнеру: пока существует итератор контейнер не будет уничтожен. -
transform_iterator<UnaryFunction, Iterator>--- вызывает UnaryFunction над значением обернутого итератора при каждом разыменовании м возвращает результат. -
zip_iterator<IteratorTuple>--- итерирует множество итераторов.
bind и lambda
Модуль bind библиотеки Boost является обобщением функций std::bind1st и std::bind2nd.
bind(g, _1, _1, _1)(x, y, z); // g(x, x, x)
Модуль lambda библиотеки Boost вводит концепцию безымянных функций.