Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Эффективное использование STL. Библиотека программиста - Мейерс С.

Мейерс С. Эффективное использование STL. Библиотека программиста — Спб.: Питер , 2002. — 224 c.
ISBN 5-94723-382-7
Скачать (прямая ссылка): effektivnoeispolzovaniestlbibliote2002.djvu
Предыдущая << 1 .. 96 97 98 99 100 101 < 102 > 103 104 105 106 107 108 .. 114 >> Следующая

запрос "STL", вы получите сотни ссылок, часть из которых даже будет
содержать полезную информацию. Впрочем, большинство программистов STL в
поисках не нуждается и хорошо знает следующие сайты:
• сайт SGI STL, http://www.sgi.com/tech/stl;
• сайт STLport, http://stlport.org;
• сайт Boost, http://www.boost.org.
Ниже я постараюсь объяснить, почему эти сайты заслуживают вашего
внимания.
Сайт SGI STL
Web-сайт SGI STL не случайно находится в начале списка. На нем имеется
подробная документация по всем компонентам STL. Многие программисты
рассматривают его как основной источник электронной документации
независимо от используемой платформы STL. Документацию собрал Мэтт Остерн
(Matt Austem), который позднее дополнил ее и представил в книге "Generic
Programming and the STL" [4]. Материал не сводится к простому описанию
компонентов STL. Например, описание потоковой безопасности контейнеров
STL (см. совет 12) основано на материалах сайта SGI STL.
На сайте SGI программисту предлагается свободно распространяемая
реализация STL. Она была адаптирована лишь для ограниченного круга
компиляторов, но поставка STL легла в основу распространенной поставки
STLport, описанной ниже. Более того, в реализацию STL от SGI входят
некоторые нестандартные компоненты, делающие программирование в STL не
только более мощным и гибким, но и более интересным. Некоторые из них
стоит выделить.
• Хэшированные ассоциативные контейнеры hash set, hashjnul ti set,
hashjnap и hashjnul ti map. За дополнительной информацией об этих
контейнерах обращайтесь к совету 25.
• Одиосвязный список si i st. Контейнер si i st реализован наиболее
стандартным образом, а итераторы указывают на те узлы списка, на которые
они и должны указывать. К сожалению, этот факт оборачивается
дополнительными затратами при реализации функций i nsert и erase,
поскольку обе функции должны модифицировать указатель на следующий узел
списка в узле, предшествующем тому, на который указывает итератор. В
двусвязном списке (например, в стандартном контейнере 1 ist) это не
вызывает проблем, но в односвязном списке возврат к предыдущему узлу
является операцией с линейной сложностью. В контейнере si i st из
реализации SGI функции insert и erase выполняются с линейной сложностью
вместо постоянной, что является существенным недостатком. В реализации
SGI эта проблема решается при помощи нестандартных (но зато работающих с
постоянной сложностью) функций insert_after и erase_after. В
сопроводительной документации говорится:
Совет 50 199
"...Если окажется, что функции insert_after и erase_after плохо подходят
для ваших целей, и вам часто приходится вызывать функции insert и erase в
середине списка, вероятно, вместо si i st лучше воспользоваться
контейнером 1 ist".
В реализацию Dinkumware также входит односвязный список si i st, но в нем
используется другая архитектура итераторов, сохраняющая постоянную
сложность при вызовах insert и erase. За дополнительной информацией о
Dimkumware обращайтесь к приложению Б.
• Контейнер горе, аналог string для очень больших строк. В
документации SGI контейнер горе описывается так:
"Контейнер горе представляет собой масштабированную разновидность stri
ng: он предназначен для эффективного выполнения операций со строками в
целом. Затраты времени на такие операции, как присваивание, конкатенация
и выделение подстроки, практически не зависят от длины строки. В отличие
от строк С, контейнер горе обеспечивает разумное представление для очень
длинных строк (например, содержимого буфера текстового редактора или
сообщений электронной почты)".
Во внутреннем представлении контейнер горе реализуется в виде дерева
подстрок с подсчетом ссылок, при этом каждая строка хранится в виде
массива char. Одна из интересных особенностей интерфейса горе заключается
в том, что функции begin и end всегда возвращают тип const_iterator. Это
сделано для предотвращения операций, изменяющих отдельные символы. Такие
операции обходятся слишком дорого. Контейнер горе оптимизирован для
операций с текстом в целом или большими фрагментами (присваивание,
конкатенация и выделение подстроки); операции с отдельными символами
выполняются неэффективно.
• Различные нестандартные объекты функций и адаптеры. Некоторые
классы функторов из исходной реализации HP STL не вошли в Стандарт C++.
Опытным мастерам старой школы больше всего не хватает функторов selectlst
и select2nd, чрезвычайно удобных при работе с контейнерами тар и
multimap. Функтор selectlst возвращает первый компонент объекта pair, а
функтор select2nd возвращает второй компонент объекта pair. Пример
использования этих нестандартных шаблонов классов функторов:
map<int.string> m;
// Вывод всех ключей map в cout transforms.beginO .m.endO,
ostream_iterator<int>(cout,"\n"),
selectlst<map<i nt,stri ng>::value_type>()):
// Создать вектор и скопировать в него // все ассоциированные значения из
тар vector<string> v:
transform(m.beginO.m.endO ,back_inserter(v).
Предыдущая << 1 .. 96 97 98 99 100 101 < 102 > 103 104 105 106 107 108 .. 114 >> Следующая