Сайт SGI STL

Сайт SGI STL

Web-сайт SGI STL не случайно находится в начале списка. На нем имеется подробная документация по всем компонентам STL. Многие программисты рассматривают его как основной источник электронной документации незав4исимо от используемой платформы STL. Документацию собрал Мэтт Остерн (Matt Austern), который позднее дополнил ее и представил в книге «Generic Programming and the STL» [4]. Материал не сводится к простому описанию компонентов STL. Например, описание потоковой безопасности контейнеров STL (см. совет 12) основано на материалах сайта SGI STL.

На сайте SGI программисту предлагается свободно распространяемая реализация STL. Она была адаптирована лишь для ограниченного круга компиляторов, но поставка STL легла в основу распространенной поставки STLport, описанной ниже. Более того, в реализацию STL от SGI входят некоторые нестандартные компоненты, делающие программирование в STL не только более мощным и гибким, но и более интересным. Некоторые из них стоит выделить.

Хэшированные ассоциативные контейнеры hash_set, hash_multiset, hash_map и hash_multimap. За дополнительной информацией об этих контейнерах обращайтесь к совету 25.

Односвязный список slist. Контейнер slist реализован наиболее стандартным образом, а итераторы указывают на те узлы списка, на которые они и должны указывать. К сожалению, этот факт оборачивается дополнительными затратами при реализации функций insert и erase, поскольку обе функции должны модифицировать указатель на следующий узел списка в узле, предшествующем тому, на который указывает итератор. В двусвязном списке (например, в стандартном контейнере list) это не вызывает проблем, но в односвязном списке возврат к предыдущему узлу является операцией с линейной сложностью. В контейнере slist из реализации SGI функции insert и erase выполняются с линейной сложностью вместо постоянной, что является существенным недостатком. В реализации SGI эта проблема решается при помощи нестандартных (но зато работающих с постоянной сложностью) функций insert_after и erase_after. В сопроводительной документации говорится:

«...Если окажется, что функции insert_after и erase_after плохо подходят для ваших целей, и вам часто приходится вызывать функции insert и erase в середине списка, вероятно, вместо slist лучше воспользоваться контейнером list».

В реализацию Dinkumware также входит односвязный список slist, но в нем используется другая архитектура итераторов, сохраняющая постоянную сложность при вызовах insert и erase. За дополнительной информацией о Dimkumware обращайтесь к приложению Б.

Контейнер rope, аналог string для очень больших строк. В документации SGI контейнер rope описывается так:

«Контейнер rope представляет собой масштабированную разновидность string: он предназначен для эффективного выполнения операций со строками в целом. Затраты времени на такие операции, как присваивание, конкатенация и выделение подстроки, практически не зависят от длины строки. В отличие от строк С, контейнер rope обеспечивает разумное представление для очень длинных строк (например, содержимого буфера текстового редактора или сообщений электронной почты)».

Во внутреннем представлении контейнер rope реализуется в виде дерева подстрок с подсчетом ссылок, при этом каждая строка хранится в виде массива char. Одна из интересных особенностей интерфейса rope заключается в том, что функции begin и end всегда возвращают тип const_iterator. Это сделано для предотвращения операций, изменяющих отдельные символы. Такие операции обходятся слишком дорого. Контейнер rope оптимизирован для операций с текстом в целом или большими фрагментами (присваивание, конкатенация и выделение подстроки); операции с отдельными символами выполняются неэффективно.

Различные нестандартные объекты функций и адаптеры. Некоторые классы функторов из исходной реализации HP STL не вошли в Стандарт С++. Опытным мастерам старой школы больше всего не хватает функторов select1st и select2nd, чрезвычайно удобных при работе с контейнерами map и multimap. Функтор select1st возвращает первый компонент объекта pair, а функтор select2nd возвращает второй компонент объекта pair. Пример использования этих нестандартных шаблонов классов функторов:

map<int,string> m;

// Вывод всех ключей map в cout

transform(m.begin(),m.end(),

ostream_iterator<int>(cout," "),

select1st<map<int,string>::value_type>());

// Создать вектор и скопировать в него

// все ассоциированные значения из map

vector<string> v:

transforms.begin(),m.end() ,back_inserter(v),

select2nd<map<int,string>::value_type>());

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

Настоящих фанатов STL это нисколько не волнует. Они считают, что отсутствие select1st и select2nd в Стандарте само по себе является вопиющей несправедливостью.

К числу нестандартных объектов функций, входящих в реализацию STL, также принадлежат объекты identity, project1st, project2nd, compose1 и compose2. Информацию о них можно найти на сайте, хотя пример использования compose2 приводился на с. 172 настоящей книги. Надеюсь, я убедил вас в том, что посещение web-сайта SGI принесет несомненную пользу.

Реализация библиотеки от SGI выходит за рамки STL. Первоначально ставилась цель разработки полной реализации стандартной библиотеки С++ за исключением компонентов, унаследованных из С (предполагается, что у вас в распоряжении уже имеется стандартная библиотека С). По этой причине с сайта SGI также стоит получить реализацию библиотеки потоков ввода-вывода С++. Как следует ожидать, эта реализация хорошо интегрируется с реализацией STL от SGI, но при этом по быстродействию она превосходит многие аналогичные реализации, поставляемые с компиляторами С++.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Сайт работает на вас

Из книги автора

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


Сайт «Сковородник»

Из книги автора

Сайт «Сковородник» Введем в поисковую строку Яндекса запрос сайт о кулинарии и получим в выдаче 54 млн ссылок. На первых местах, как и обычно, стоят самые важные, с точки зрения Яндекса, сайты. Можно посетить любые из них, чтобы подивиться невероятному количеству рецептов.


Сайт-визитка

Из книги автора

Сайт-визитка Такой сайт состоит из небольшого количества страниц, где предоставлена самая необходимая, но достаточная информация о фирме. Дизайн сайта, как правило, выполнен с учетом фирменного стиля организации. Здесь есть разделы, рассказывающие о самой компании, об


Информационный сайт

Из книги автора

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


Персональный сайт

Из книги автора

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


1.1. Веб-система > веб-сайт

Из книги автора

1.1. Веб-система > веб-сайт Буквально за несколько лет сфера веб-разработок прошла путь эволюции от примитивных статичных веб-страничек (текст + картинки) до многофункциональных интегрированных с другими приложениями веб-систем. Появилась реальная возможность «вынести»


19.2.5.3. Создайте Web-сайт

Из книги автора

19.2.5.3. Создайте Web-сайт Если разработчик намеревается создать вокруг своего проекта прочное сообщество пользователей или разработчиков, то должен существовать Web-сайт проекта. Рассмотрим стандартные разделы сайта проекта.• Хартия проекта (почему он существует, целевая


19.2.5.3. Создайте Web-сайт

Из книги автора

19.2.5.3. Создайте Web-сайт Если разработчик намеревается создать вокруг своего проекта прочное сообщество пользователей или разработчиков, то должен существовать Web-сайт проекта. Рассмотрим стандартные разделы сайта проекта.• Хартия проекта (почему он существует, целевая


Сайт SGI STL

Из книги автора

Сайт SGI STL Web-сайт SGI STL не случайно находится в начале списка. На нем имеется подробная документация по всем компонентам STL. Многие программисты рассматривают его как основной источник электронной документации незав4исимо от используемой платформы STL. Документацию собрал


Сайт STLport

Из книги автора

Сайт STLport Главная отличительная особенность STLport заключается в том, что эта модифицированная версия реализации STL от SGI (включая потоки ввода-вывода и т. д.) была перенесена более чем на 20 компиляторов. STLport, как и библиотека SGI, распространяется бесплатно. Если ваш код должен


Сайт Boost

Из книги автора

Сайт Boost В 1997 году завершился процесс, приведший к появлению Международного стандарта С++. Многие участники были разочарованы тем, что возможности, за которые они выступали, не прошли окончательный отбор. Некоторые из этих участников были членами самого Комитета, поэтому


Web-сайт

Из книги автора

Web-сайт Подобная книга не принесла бы много пользы, если бы вам пришлось набирать листинг каждой исходной программы вручную. Структура роликов Flash, множество различных элементов которых – клипы, кнопки и графические образы – необходимо поместить в строго определенное


Сайт «в живую»

Из книги автора

Сайт «в живую» Чтобы получить возможность работать с только что созданным шаблоном в Joomla!, необходимо создать файл templateDetails.xml. Базовая версия без картинок выглядит так:<install version="1.5"