Сообщений 7    Оценка 123 [+1/-0]         Оценить  
Система Orphus

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

Автор: Скотт Мейерс
Издательство: Питер, 2002
224 страницы

Материал предоставили: Игорь Сухов
Валерий Лаптев
Найти в магазинах

Аннотация

Содержание
Комментарии

Аннотация

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

Содержание

Предисловие

Благодарности

Введение

Определение, использование и расширение STL
Ссылки
STL и Стандарты
Подсчет ссылок
string и wstring
Терминология
Примеры
Вопросы эффективности
Рекомендации

Глава 1 Контейнеры

Совет 1. Внимательно подходите к выбору контейнера
Совет 2. Остерегайтесь иллюзий контейнерно-независимого кода
Совет 3. Реализуйте быстрое и корректное копирование объектов в контейнерах
Совет 4. Вызывайте empty вместо сравнения size() с нулем
Совет 5. Используйте интервальные функции вместо одноэлементных
Совет 6. Остерегайтесь странностей лексического разбора C++
Совет 7. При использовании контейнеров указателей, для которых вызывался оператор new, не забудьте вызвать delete для указателей перед уничтожением контейнера
Совет 8. Никогда не создавайте контейнеры, содержащие auto_ptr
Совет 9. Тщательно выбирайте операцию удаления
Совет 10. Помните о правилах и ограничениях распределителей памяти
Совет 11. Учитывайте область применения пользовательских распределителей памяти
Совет 12. Разумно оценивайте потоковую безопасность контейнеров STL

Глава 2 Контейнеры vector и string

Совет 13. Используйте vector и string вместо динамических массивов
Совет 14. Используйте reserve для предотвращения лишних операций перераспределения памяти
Совет 15. Помните о различиях в реализации string
Совет 16. Научитесь передавать данные vector и string функциям унаследованного интерфейса
Совет 17. Используйте "фокус с перестановкой" для уменьшения емкости
Совет 18. Избегайте vector<bool>

Глава 3 Ассоциативные контейнеры

Совет 19. Помните о различиях между равенством и эквивалентностью
Совет 20. Определите тип сравнения для ассоциативного контейнера, содержащего указатели
Совет 21. Следите за тем, чтобы функции сравнения возвращали false в случае равенства
Совет 22. Избегайте изменения ключа "на месте" в контейнерах set и multiset
Совет 23. Рассмотрите возможность замены ассоциативных контейнеров сортированными векторами
Совет 24. Тщательно выбирайте между map::operator[] и map::insert
Совет 25. Изучите нестандартные хэшированные контейнеры

Глава 4 Итераторы

Совет 26. Старайтесь использовать iterator вместо const_iterator, reverse_iterator и const_reverse_iterator
Совет 27. Используйте distance и advance для преобразования const_iterator в iterator
Совет 28. Научитесь использовать функцию base
Совет 29. Рассмотрите возможность использования istreambuf_iterator при посимвольном вводе

Глава 5 Алгоритмы

Совет 30. Следите за тем, чтобы приемный интервал имел достаточный размер
Совет 31. Помните о существовании разных средств сортировки
Совет 32. Сопровождайте вызовы remove-подобных алгоритмов вызовом erase
Совет 33. Будьте внимательны при использовании remove-подобных алгоритмов с контейнерами указателей
Совет 34. Помните о том, какие алгоритмы получают сортированные интервалы
Совет 35. Реализуйте простые сравнения строк без учета регистра символов с использованием mismatch или lexicographical_compare
Совет 36. Правильно реализуйте copy_if
Совет 37. Используйте accumulate или for_each для обобщения интервальных данных

Глава 6 Функции, функторы и классы функций

Совет 38. Проектируйте классы функторов для передачи по значению
Совет 39. Реализуйте предикаты в виде "чистых" функций
Совет 40. Классы функторов должны быть адаптируемыми
Совет 41. Разберитесь, для чего нужны ptr_fun, mem_fun и mem_fun_ref
Совет 42. Следите за тем, чтобы конструкция less <T> означала operator <

Глава 7 Программирование в STL

Совет 43. Используйте алгоритмы вместо циклов
Совет 44. Используйте функции контейнеров вместо одноименных алгоритмов
Совет 45. Различайте алгоритмы count, find, binary_search, lower_bound, upper_bound и equal_range
Совет 46. Передавайте алгоритмам объекты функций вместо функций
Совет 47. Избегайте "нечитаемого" кода
Совет 48. Всегда включайте нужные заголовки
Совет 49. Научитесь читать сообщения компилятора
Совет 50. Помните о web-сайтах, посвященных STL
Сайт
SGI STLСайт
STLportСайт
Boost

Литература

Книги, написанные мной
Книги, написанные другими авторами
Ошибки и опечатки

Приложение А. Локальные контексты

Сравнение строк без учета регистра символов
Первая попытка
Локальный контекст
Локальные контексты в C++
Фасет collate
Сравнение строк без учета регистра

Приложение Б. Замечания по поводу платформ STL от Microsoft

Шаблоны функций классов в STL
MSVC версий 4-6
Обходное решение для MSVC4-5
Обходное решение для MSVC6

Алфавитный указатель

Комментарии

Игорь Сухов

Русский перевод (оценим его, как неплохой) 3-й книги из эффективной серии Скотта Мейерса, в отличие от первых двух (Эффективное использование С++ и Наиболее эффективное использование С++), опоздал от западного издания всего на один год, что уже не может не радовать. Стиль и качество изложения сохранились - быстро (иногда не заглядывая глубоко в тему) и непринужденно. Повышение производительности, неочевидная (и побочная) функциональность некоторых алгоритмов/контейнеров STL - вот на чем автор останавливается наиболее подробно, и как мне кажется, не зря. В общем - must read.

Валерий Лаптев

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

В качестве примера можно привести совет 22 "Избегайте изменения ключа "на месте" в контейнерах set и multiset". Начинающему такой совет ничего не говорит, а опытный и так знает, что такие действия "выходят боком". А вот для того программиста, который множествами уже попользовался, но тонкостей еще не знает, в этом совете может найтись полезная информация.

Уровень (скажем так) советов в этой книге я бы определил "после начинающего". Если начинающий - это программист, первый раз решивший использовать STL, он должен сначала просто изучить состав и основные принципы построения STL. Для этого книга Мейерса подходит плохо - состав и принципы надо изучать по книге Джосаттиса, а первый проект выполнять по книге Халперна. А вот если программист делает второй, максимум - третий проект с помощью STL, то книга - в самый раз.

Однако и для начинающих, и для опытных программистов в книге найдутся некоторые полезные сведения. Для начинающих - это конечно совет 50, где описаны сайты с бесплатными библиотеками STL: SGI, STLport и boost. Опытным программистам тоже найдется что прочитать: статья Мэтта Остерна о локалях и фасетах.

Перевод - неплохой, хотя встречаются опечатки и погрешности.

    Сообщений 7    Оценка 123 [+1/-0]         Оценить