Скотт Мейерс - Эффективное использование STL
- Название:Эффективное использование STL
- Автор:
- Жанр:
- Издательство:Питер
- Год:2002
- Город:СПб.
- ISBN:5-94723-382-7
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Скотт Мейерс - Эффективное использование STL краткое содержание
В этой книге известный автор Скотт Мейерс раскрывает секреты настоящих мастеров, позволяющие добиться максимальной эффективности при работе с библиотекой STL.
Во многих книгах описываются возможности STL, но только в этой рассказано о том, как работать с этой библиотекой. Каждый из 50 советов книги подкреплен анализом и убедительными примерами, поэтому читатель не только узнает, как решать ту или иную задачу, но и когда следует выбирать то или иное решение — и почему именно такое.
Эффективное использование STL - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Иначе говоря, Boost предлагается в качестве механизма, помогающего отделить плевелы от зерен в области потенциальных дополнений стандартной библиотеки C++. Вполне достойная миссия, заслуживающая нашей благодарности.
Также стоит обратить внимание на подборку библиотек, находящихся на сайте Boost. Я не стану описывать ее здесь хотя бы потому, что к моменту выхода книги на сайте наверняка появятся новые библиотеки. Для пользователей STL особый интерес представляют две библиотеки. Первая содержит шаблон shared_ptr
, умный указатель с подсчетом ссылок, который в отличие от указателя auto_ptr
из стандартной библиотеки может храниться в контейнерах STL (см. совет 8). Библиотека умных указателей также содержит шаблон shared_array
, умный указатель с подсчетом ссылок для работы динамическими массивами, но в совете 13 вместо динамических массивов рекомендуется использовать контейнеры vector
и string
; надеюсь, приведенные аргументы покажутся вам убедительными.
Поклонники STL также оценят богатый ассортимент библиотек, содержащих объекты функций и другие вспомогательные средства. В этих библиотеках заново спроектированы и реализованы некоторые концепции, заложенные в основу объектов функций и адаптеров STL, в результате чего были сняты некоторые искусственные ограничения, снижающие практическую полезность стандартных функторов. В частности, при попытках использовать bind2nd
с функциями mem_fun
и mem_fun_ref
(см. совет 41) для привязки объекта к параметрам функции класса выясняется, что при передаче параметра по ссылке код, скорее всего, компилироваться не будет. Аналогичный результат достигается использованием not1
и not2
с ptr_fun
и функцией, получающей параметр по ссылке. Причина в обоих случаях заключается в том, что в процессе специализации шаблона многие платформы STL генерируют «ссылку на ссылку», но в C++ такая конструкция запрещена (в настоящее время Комитет по стандартизации рассматривает возможность внесения изменений в Стандарт для решения этой проблемы). Пример проблемы «ссылки на ссылку»:
class Widget {
public:
…
int readStream(istream& stream); // Функции readStream
… // параметр передается
}; // по ссылке
vector vw;
…
for_each( // Большинство платформ STL
vw.begin(), vw.end(), // при этом вызове
bind2nd(mem_fun(&Widget::readStream), cin) // пытается сгенерировать
); // ссылку на ссылку.
//Фрагмент не компилируется!
Объекты функций Boost решают эту и многие другие проблемы, а также значительно повышают выразительность объектов функций.
Если вы интересуетесь потенциальными возможностями объектов функций STL и хотите познакомиться с ними поближе, поскорее посетите сайт Boost. Если объекты функций вас пугают и вы считаете, что они существуют только для умиротворения малочисленных апологетов Lisp, вынужденных программировать на C++, все равно посетите сайт Boost. Библиотеки объектов функций Boost важны, но они составляют лишь малую часть полезной информации, находящейся на сайте.
Литература
В книге имеются ссылки на большинство публикаций, перечисленных ниже, хотя многие ссылки присутствуют лишь в разделе «Благодарности». Публикации, которые в книге не упоминаются, помечены кружком вместо цифры.
Адреса URL ненадежны, поэтому я некоторое время сомневался, стоит ли приводить их в этом разделе. В итоге я решил, что даже если URL станет недействительным, предыдущее местонахождение документа поможет вам найти его по новому адресу.
Книги, написанные мной
[1] Scott Meyers, «Effective C++: 50 Specific Ways to Improve Your Programs and Designs» (second edition), Addison-Wesley, 1998, ISBN 0-201-92488-9. Также присутствует на компакт-диске «Effective C++» (см. далее).
[2] Scott Meyers, «More Effective C++: 35 New Ways to Improve Your Programs ацd Designs» (second edition), Addison-Wesley, 1996, ISBN 0-201-63371-X. Также присутствует на компакт-диске «Effective C++» (см. далее).
• Scott Meyers, «Effective C++ CD: 85 Specific Ways to Improve Your Programs and Designs» (second edition), Addison-Wesley, 1999, ISBN 0-201-31015-5. Содержит материалы обеих книг, несколько журнальных статей по теме и кое-какие новинки из области электронных публикаций. За компакт-диском обращайтесь по адресу: http://meyerscd.awl.com/. Информацию о новинках можно найти по адресам: http://zing.ncsl.nist.goc/hfweb/proceedings/meyers-jones/и http://www.microsoft.com/Mind/1099/browsing/browsing.htm.
Книги, написанные другими авторами
[3] Nicolai М. Josuttis, «The C++ Standard Library: A Tutorial and Reference», Addison-Wesley, 1999, ISBN 0-201-37926-0. Незаменимая книга, которая должна быть у каждого программиста C++.
[4] Matthew Н. Austern, «Generic Programming and the STL», Addison-Wesley, 1999, ISBN 0-201-30956-4. Фактически представляет собой печатную версию материалов web-сайта SGI STL, http://www.sgi.com/tech/stl.
[5] ISO/IEC, «International Standard, Programming Languages — C++», ISO/IEC 14882:1998(E), 1998. Официальный документ с описанием C++. Распространяется комитетом ANSI в формате PDF за $18 по адресу http://webstore.ansi.org/ansidocstore/default.asp.
[6] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, «Design Patterns: Elements of Reusable Object-Oriented Software», Addison-Wesley, 1995, ISBN 0-201-63361-2 [4] Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. «Приемы объектно-ориентированного проектирования. Паттерны проектирования» — СПб.: Питер, 2001.
. Также распространяется на компакт-диске «Design Patterns CD», Addison-Wesley, 1998, ISBN 0-201-63498-8. Наиболее авторитетное руководство по идиомам проектирования. Каждый программист C++ должен знать описанные идиомы и держать под рукой эту книгу или компакт-диск.
[7] Bjarne Stroustrup, «The C++ Programming Language» (third edition), Addison-Wesley, 1997, ISBN 0-201-88954-4. Идиома «захвата ресурсов при инициализации», упоминаемая в совете 12, рассматривается в разделе 14.4.1 этой книги, а код из совета 36 приведен на с. 530.
[8] Herb Sutter, «Exceptional C++: 47 Engineering Puzzles, Programming Problems and Solutions», Addison-Wesley, 2000, ISBN 0-201-61562-2. Достойное дополнение к моей серии «Effective…». Я бы высоко оценил эту книгу в любом случае, даже если бы Херб не попросил меня написать к ней предисловие.
[9] Herb Sutter, «More Exceptional C++: 40 More Engineering Puzzles, Programming Problems and Solutions», Addison-Wesley, 2001, ISBN 0-201-70434-X. Судя по предварительной версии, которую я видел, эта книга ничуть не хуже предыдущей.
[10] Dov Bulka, David Mayhew, «Efficient C++: Performance Programming Techniques», Addison-Wesley, 2000, ISBN 0-201-37950-3. Единственная и поэтому лучшая книга, посвященная вопросам эффективности в C++.
[11] Matt Austern, «How to Do Case-Insensitive String Comparison», C++ Report, май 2000 г. Эта статья настолько полезна, что она воспроизводится в приложении А настоящей книги.
[12] Herb Sutter, «When Is a Container Not A Container?», C++ Report, май 1999 г. Статья доступна по адресу http://www.gotw.ca/publications/mill09.htm. Материал пересмотрен и дополнен в совете 6 книги «More Exceptional C++» [9].
[13] Herb Sutter, «Standard Library News: sets and maps», C++ Report, октябрь 1999г. Статья доступна по адресу http://www.gotw.ca/publications/mill11.htm. Материал пересмотрен и дополнен в совете 8 книги «More Exceptional C++» [9].
Читать дальшеИнтервал:
Закладка: