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

Introduction

Boost , Chapter 1. Range 2.0 , Chapter 1. Range 2.0

Boost C++ LibrariesHomeLibrariesPeopleFAQMore

PrevUpHomeNext

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

Наиболее распространенной формой диапазонов, используемых в сообществе C++, являются стандартные библиотечные контейнеры. Однако при написании алгоритмов часто бывает желательно, чтобы алгоритм принимал другие типы, которые предлагают достаточную функциональность для удовлетворения потребностей общего кода., если применяется подходящий слой опосредованности. Например, необработанные массивы часто подходят для использования с общим кодом, который работает с контейнерами, при условии использования подходящего адаптера. Аналогично, нулевые струны могут рассматриваться как контейнеры символов, если они соответствующим образом адаптированы.

Таким образом, эта библиотека предоставляет средства для адаптации стандартных контейнеров, нулевых завершенных строк,<std::pairs>итераторов и необработанных массивов (и более), так что один и тот же общий код может работать с ними всеми. Основная идея состоит в том, чтобы добавить еще один слой опосредования, используяметафункциии отдельно стоящие функции, чтобы можно было устранить синтаксические и/или семантические различия.

Основными преимуществами являются

  • Более простая реализация и спецификация алгоритмов генерического диапазона
  • более гибкий, компактный и поддерживаемый клиентский код
  • безопасное использование встроенных массивов (для унаследованного кода; зачем еще использовать встроенные массивы?)

Example - Iterate over the values in a map

using namespace boost;
using namespace boost::adaptors;
for_each( my_map | map_values, fn );

Example - Iterate over the keys in a map

using namespace boost;
using namespace boost::adaptors;
for_each( my_map | map_keys, fn );

Example - Push the even values from a map in reverse order into the container target

using namespace boost;
using namespace boost::adaptors;
// Assume that is_even is a predicate that has been implemented elsewhere...
push_back(target, my_map | map_values | filtered(is_even()) | reversed);


PrevUpHomeNext

Статья Introduction раздела Chapter 1. Range 2.0 Chapter 1. Range 2.0 может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 1. Range 2.0 ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 23:11:34/0.0070328712463379/0