Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Design Topics

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 2. Boost String Algorithms Library

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Design Topics

String Representation

Как следует из названия, эта библиотека работает в основном со строками. Однако в контексте этой библиотеки строка не ограничивается какой-либо конкретной реализацией (например,<std::basic_string>), а является концепцией. Это позволяет повторно использовать алгоритмы в этой библиотеке для любого типа строк, который удовлетворяет заданным требованиям.

Определение:Струна — этодиапазонсимволов, доступных последовательно упорядоченным образом. Персонаж — это любой ценностный тип с «дешевым» копированием и присвоением.

Первое требование струнного типа заключается в том, что он должен быть доступен с использованиемУсиление. диапазон. Это средство позволяет получить доступ к элементам внутри струны единым способом на основе итератора. Этого достаточно для нашей библиотеки.

Второе требование определяет способ хранения символов в строке. Алгоритмы в этой библиотеке работают с предположением, что копирование символа дешевле, чем выделение дополнительного хранилища для кэширования результатов. Это естественное предположение для общих типов характера. Алгоритмы будут работать, даже если это требование не будет выполнено, но за счет ухудшения производительности.

Кроме того, некоторые алгоритмы имеют дополнительные требования к струнному типу. В частности, требуется, чтобы алгоритм мог создать новую строку данного типа. В этом случае требуется, чтобы тип удовлетворял требованиям последовательности (Std & #167; 23.1.1).

В ссылке, а также в коде требование по типу строки обозначается именем аргумента шаблона.<RangeT>означает, что основные требования к диапазону должны соблюдаться.<SequenceT>определяет требования к расширенным последовательностям.

Sequence Traits

Основное различие между<std::list>и<std::vector>заключается не в интерфейсах, которые они предоставляют, а во внутренних деталях класса и способе выполнения различных операций. Проблема в том, что невозможно вывести это различие из определений классов без какого-либо особого механизма. Однако некоторые алгоритмы могут работать значительно быстрее, зная свойства конкретного контейнера.

Черты последовательности позволяют задать дополнительные свойства контейнера последовательностей (см. Std.§32.2). Эти свойства затем используются алгоритмами для выбора оптимизированной обработки для некоторых операций. Черты последовательности объявлены в заголовке<boost/algorithm/string/sequence_traits.hpp>.

В таблице C обозначает контейнер, а c является объектом C.

Table 2.12. Sequence Traits

Trait Description
has_native_replace<C>::value Specifies that the sequence has std::string like replace method
has_stable_iterators<C>::value Specifies that the sequence has stable iterators. It means, that operations like insert/erase/replace do not invalidate iterators.
has_const_time_insert<C>::value Specifies that the insert method of the sequence has constant time complexity.
has_const_time_erase<C>::value Specifies that the erase method of the sequence has constant time complexity

Текущая реализация содержит специализации для std::listи std::basic_stringиз стандартной библиотеки и std SGI::ropeи std::slist.

Find Algorithms

Алгоритмы поиска имеют функциональность, аналогичную алгоритму<std::search()>. Они обеспечивают другой интерфейс, который больше подходит для общих струнных операций. Вместо того, чтобы возвращать только начало соответствующей последовательности, они возвращают диапазон, который необходим, когда длина соответствующей последовательности не известна заранее. Эта функция также позволяет разделить входную последовательность на три части: префикс, подстроку и суффикс.

Еще одним отличием является добавление различных методов поиска помимо find_first, включая find_regex.

Это библиотека, алгоритмы поиска реализованы в терминахFinders. Искатели используются также другими объектами (заменой, разделением). Для удобства существуют также функциональные обертки для этих искателей, чтобы упростить операции поиска.

В настоящее время библиотека содержит только наивную реализацию алгоритмов поиска со сложностью O(n*m), где n — размер входной последовательности, а m — размер поисковой последовательности. Существуют алгоритмы со сложностью O(n), но для меньшей последовательности постоянные накладные расходы довольно велики. Для малых m<

Replace Algorithms

Реализация алгоритмов замены следует многоуровневой структуре библиотеки. Нижний слой реализует родовое замещение диапазона во входной последовательности. Этот слой принимает объектFinderи объектFormatterв качестве входа. Эти два функтора определяют, что заменить и чем заменить. Функции верхнего слоя — это просто обертывание вызовов в нижний слой. Искатели делятся с объектом поиска и разделения.

Как обычно, реализация нижнего слоя предназначена для работы с общей последовательностью при использовании, если это возможно, специфических признаков (с использованиемпризнаков последовательности).

Find Iterators & Split Algorithms

Итераторы поиска являются логическим продолжениемобъекта поиска. Вместо того, чтобы искать один матч, весь вход можно итеративно искать несколько матчей. Результат поиска затем используется для разделения входа. Это зависит от алгоритмов, какие части возвращаются в результате. Они могут быть соединены между собой<find_iterator>частями<split_iterator>.

Кроме того, алгоритмы разделения, такие как<find_all()>и<split()>, могут упростить общие операции. Они используют итератор поиска для поиска всего ввода и копирования совпадений, которые они нашли в поставляемом контейнере.

Exception Safety

Библиотека требует, чтобы все операции по типам, используемым в качестве аргументов шаблона или функции, обеспечивалиосновную гарантию безопасности исключения. В свою очередь, все функции и алгоритмы в этой библиотеке, за исключением случаев, когда указано иное, обеспечатосновную гарантию безопасности исключения. Другими словами: Библиотека сохраняет свои инварианты и не утечка ресурсов перед лицом исключений. Некоторые библиотечные операции дают более сильные гарантии, которые документируются на индивидуальной основе.

Некоторые функции могут обеспечитьсильную гарантию безопасности исключения. Это означает, что следующие утверждения верны:

  • Если выпадает исключение, нет никаких эффектов, кроме эффектов функции.
  • Если исключение выбрасывается иначе, чем функцией, нет никаких эффектов.

Эта гарантия может быть предоставлена при условии, что операции по типам, используемым для аргументации этих функций, либо обеспечивают сильную гарантию исключения, либо не изменяют глобальное государство.

В ссылке под терминомсильная гарантия безопасности исключениямы подразумеваем гарантию, как определено выше.

For more information about the exception safety topics, follow this link


PrevUpHomeNext

Статья Design Topics раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 2. Boost String Algorithms Library может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 2. Boost String Algorithms Library ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:44:18/0.0082201957702637/0