LibKing » Книги » comp-programming » Скотт Мейерс - Эффективное использование STL

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

Тут можно читать онлайн Скотт Мейерс - Эффективное использование STL - бесплатно полную версию книги (целиком). Жанр: comp-programming, издательство Питер, год 2002. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
libking
  • Название:
    Эффективное использование STL
  • Автор:
  • Жанр:
  • Издательство:
    Питер
  • Год:
    2002
  • ISBN:
    5-94723-382-7
  • Рейтинг:
    3.6/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Ваша оценка:

Скотт Мейерс - Эффективное использование STL краткое содержание

Эффективное использование STL - описание и краткое содержание, автор Скотт Мейерс, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В этой книге известный автор Скотт Мейерс раскрывает секреты настоящих мастеров, позволяющие добиться максимальной эффективности при работе с библиотекой STL.

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

Эффективное использование STL - читать онлайн бесплатно полную версию (весь текст целиком)

Эффективное использование STL - читать книгу онлайн бесплатно, автор Скотт Мейерс
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

[14] Nicolai M. Josuttis, «Predicates vs. Function Objects», C++ Report, июнь 2000 г.

[15] Matt Austern, «Why You Shouldn't Use set — and What to Use Instead», C++ Report, апрель 2000 г.

[16] P.J. Plauger, «HashTables», C/C++ Users Journal, ноябрь 1999 г. В статье описан подход реализации Dinkumware к хэшированным контейнерам (см. совет 25) и его отличия от альтернативных решений.

[17] Jack Reeves, «STL Gotcha's», C++ Report, январь 1997 г. Статья доступна по адресу http://www.bleading-edge.com/Publications/C++Report/v9701/abstract.htm.

[18] Jack Reeves, «Using Standard string in the Real World, Part 2», C++ Report, январь 1999 г. Статья доступна по адресу http://www.bleading-edge.com/Publications/C++Report/v9901/abstract.htm.

[19] Andrei Alexandrescu, «Traits: The if-then-else of Types», C++ Report, апрель 2000 г. Статья доступна по адресу http://www.creport.com/html/from_pages/view_recent_articles_c.cfm?ArticleID=402.

[20] Herb Sutter, «Optimizations That Aren't (In a Multithreaded World)», C/C++ Users Journal, июнь 1999 г. Статья доступна по адресу http://www.gotw.ca/publications/optimizations.htm. Материал пересмотрен и дополнен в совете 16 книги «More Exceptional C++» [9].

[21] Web-сайт SGI STL, http://www.sgi.com/tech/stl. В совете 50 кратко описано содержимое этого сайта. Страница, посвященная потоковой безопасности контейнеров STL (взятая за основу при написании совета 12), накодится по адресу http://www.sgi.com/tech/stl/thread_safety.html.

[22] Web-сайт Boost, http://www.boost.org/. Содержимое сайта кратко описано в совете 50.

[23] Nicolai M. Josuttis, «User-Defined Allocator», http://www.josuttis.com/cppcode/allocator.html. Страница является частью сайта, посвященного превосходной книге Джосаттиса о стандартной библиотеке C++ [3].

[24] Matt Austern, «The Standard Librarim: What Are Allocators Good For?», форум экспертов C/C++ Users Journal (сетевое дополнение к журналу), ноябрь 2000 г., http://www.cuj.com/experts/1812/austern.htm. Найти толковую информацию о распределителях памяти нелегко. Статья дополняет материал советов 10 и 11. Кроме того, в ней приведен пример реализации распределителя памяти.

[25] Klaus Kreft, Angelika Langer, «A Sophisticated Implementation of User-Defined Inserters and Extractors», C++ Report, февраль 2000 г.

[26] Leor Zolman, «An STL Error Message Decryptor for Visual C++», C/C++ Users Journal, июль 2001 г. Статья и описанная в ней программа доступны по адресу http://www.bdsoft.com/tools/stlfilt.html.

[27] Bjarne Stroustrup, «Sixteens Ways to Stack a Cat», C++ Report, октябрь 1990 г. Статья доступна по адресу http://www.csdn.net/dev/C&C++/Document/Stackcat.pdf.

• Herb Sutter, «Guru of the Week #74: Uses and Abuses of vector», сентябрь 2000 г. Задача с прилагаемым решением помогает разобраться в некоторых аспектак использования vector, в том числе в различиях между размером и емкостью (см. совет 14). Кроме того, в статье обсуждаются преимущества алгоритмов перед циклическими вызовами (см. совет 43).

• Matt Austern, «The Standard Librarian: Bitsets and Bit Vectors?», форум экспертов C/C++ Users Journal (сетевое дополнение к журналу), май 2001 г., http://www.cuj.com/expeits/1905/austern.htm. В статье описаны контейнеры bitset, которые сравниваются с vector, — эти темы кратко рассматриваются в совете 18.

Ошибки и опечатки

• Список ошибок и опечаток в книге «Effective C++»: http://www.aristeia.com/BookErrata/ec++2e-errata.html.

[28] Список ошибок и опечаток в книге «More Effective C++»: http://www.aristeia.com/BookErrata/mec++-errata.html.

• Список ошибок и опечаток на компакт-диске «Effective C++»: http://www. aristeia.com/BookErrata/cd1e-errata.html.

[29] Обновления «More Effective C++», относящиеся к auto_ptr: http://www.awl.com/cseng/titles/0-201-63371-X/auto_ptr.html.

Локальные контексты

В совете 35 приведена реализация сравнения строк без учета регистра символов с применением алгоритмов mismatch и lexicographical_compare, но в нем также указано, что полноценное решение должно учитывать локальный контекст. Книга посвящена STL, а не вопросам интернационализации, поэтому локальным контекстам в ней не нашлось места. Тем не менее, Мэтт Остерн, автор книги «Generic Programming and the STL» [4], посвятил этой теме статью в майском номере журнала «C++ Report» [11]. Текст этой статьи приведен в настоящем приложении. Я благодарен Мэтту и фирме 101communications за то, что они разрешили мне это сделать.

Сравнение строк без учета регистра символов

Мэтт Остерн

Если вам когда-либо доводилось писать программы, в которых используются строки (а кому, спрашивается, не доводилось?), скорее всего, вы встречались с типичной ситуацией — две строки, различающиеся только регистром символов, должны были интерпретироваться как равные. В этих случаях требовалось, чтобы операции сравнения — проверка равенства, больше-меньше, выделение подстрок, сортировка — игнорировали регистр символов. Программисты очень часто спрашивают, как организовать подобные операции средствами стандартной библиотеки C++. На этот вопрос существует огромное количество ответов, многие из которых неверны.

Прежде всего необходимо избавиться от мысли о написании класса, сравнивающего строки без учета регистра. Да, с технической точки зрения это более или менее возможно. Тип std::stringстандартной библиотеки в действительности является синонимом для типа std::basic_string, std::allocator >. Операции сравнения определяются вторым параметром; передавая второй параметр с переопределенными операциями «равно» и «меньше», можно специализировать basic_stringтаким образом, что операции <и =будут игнорировать регистр символов. Такое решение возможно, но игра не стоит свеч.

• Вы не сможете выполнять операции ввода-вывода или это потребует больших дополнительных хлопот. Классы ввода-вывода стандартной библиотеки (такие как std::basic_istreamи std::basic_ostream) специализируются по двум начальным параметрам std::basic_stringstd::ostreamвсего лишь является синонимом для std::basic_ostream >). Параметры характеристик ( traits) должны совпадать. Если вы используете строки типа std::basic_string, то для вывода строк должен использоваться тип std::basic_ostream. Стандартные потоки cinи coutдля этой цели не подойдут.

• Игнорирование регистра символов является не свойством объекта, а лишь контекстом его использования. Вполне возможно, что в одном контексте строки должны интерпретироваться с учетом регистра, а в другом контексте регистр должен игнорироваться (например, при установке соответствующего режима пользователем).

• Решение не соответствует канонам. Класс char_traits, как и все классы характеристик [5] См. статью Александреску A. (Andrei Alexandrescu) в майском номере «C++ Report» за 2000 г. [19]. , прост, компактен и не содержит информации состояния. Как будет показано ниже, правильная реализация сравнений без учета регистра не отвечает ни одному из этих критериев.

• Этого вообще не достаточно. Даже если все функции basic_stringбудут игнорировать регистр, это никак не отразится на использовании внешних обобщенных алгоритмов, таких как std::searchи std::find_end. Кроме того, такое решение перестает работать, если по соображениям эффективности перейти от контейнера объектов basic_stringк таблице строк.

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


Скотт Мейерс читать все книги автора по порядку

Скотт Мейерс - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Эффективное использование STL отзывы


Отзывы читателей о книге Эффективное использование STL, автор: Скотт Мейерс. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img