Эффективное использование STL - Библиотека STL (Standard Template Library) произвела настоящий переворот в программировании C++, но ее освоение традиционно считалось весьма сложной задачей. К счастью, ситуация изменилась. В этой книге известный автор и программист Скотт Мейерс раскрывает секреты мастерства, позволяющие добиться максимальной эффективности при работе с этой библиотекой. В книге приводится множество рекомендаций и приемов работы в STL. Эти рекомендации подкреплены подробным анализом и убедительными примерами, поэтому читатель легко узнает, как решить ту или иную задачу и принять верное решение.
Название: Эффективное использование STL Автор: Скотт Мейерс Издательство: Питер Год: 2002 Страниц: 224 Формат: DJVU Размер: 1,15 МБ ISBN: 5-94723-382-7 Качество: Отличное Серия или Выпуск: Библиотека программиста Язык: Русский
Содержание:
Предисловие Благодарности Введение Определение, использование и расширение 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, reversejterator и const_reverse_iterator Совет 27. Используйте distance и advance для преобразования constjterator в iterator Совет 28. Научитесь использовать функцию base Совет 29. Рассмотрите возможность использования istreambufjterator при посимвольном вводе Глава 5. Алгоритмы Совет 30. Следите за тем, чтобы приемный интервал имел достаточный размер Совет 31. Помните о существовании разных средств сортировки Совет 32. Сопровождайте вызовы remove-подобных алгоритмов вызовом erase Совет 33. Будьте внимательны при использовании remove-подобных алгоритмов с контейнерами указателей Совет 34. Помните о том, какие алгоритмы получают сортированные интервалы Совет 35. Реализуйте простые сравнения строк без учета регистра символов с использованием mismatch или lexicographicaLcompare Совет 36. Правильно реализуйте copy_if Совет 37. Используйте accumulate или for_each для обобщения интервальных данных Глава 6. Функции, функторы и классы функций Совет 38. Проектируйте классы функторов для передачи по значению Совет 39. Реализуйте предикаты в виде «чистых» функций Совет 40. Классы функторов должны быть адаптируемыми Совет 41. Разберитесь, для чего нужны ptr_fun, mem_fun и mem_fun_ref Совет 42. Следите за тем, чтобы конструкция Iess<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 Алфавитный указатель