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


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

Автор: Мейерс C.

2002.

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

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


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


Содержание
Предисловие.9
Благодарности.11
Введение.15
Определение, использование и расширение STL.16
Ссылки.16
STL и Стандарты.16
Подсчет ссылок.17
string и wstring.18
Терминология.18
Примеры.20
Вопросы эффективности.22
Рекомендации.22
Глава 1. Контейнеры.23
Совет 1. Внимательно подходите к выбору контейнера.23
Совет 2. Остерегайтесь иллюзий контейнерно-независимого кода.27
Совет 3. Реализуйте быстрое и корректное копирование объектов в контейнерах . 31
Совет 4. Вызывайте empty вместо сравнения size() с нулем.33
Совет 5. Используйте интервальные функции вместо одноэлементных.35
Совет 6. Остерегайтесь странностей лексического разбора C++.42
Совет 7. При использовании контейнеров указателей, для которых вызывался оператор new, не забудьте вызвать delete для указателей перед уничтожением контейнера.44
Совет 8. Никогда не создавайте контейнеры, содержащие auto_ptr.48
Совет 9. Тщательно выбирайте операцию удаления.50
Совет 10. Помните о правилах и ограничениях распределителей памяти.54
Совет 11. Учитывайте область применения пользовательских
распределителей памяти.60
Совет 12. Разумно оценивайте потоковую безопасность контейнеров STL.62
Глава 2. Контейнеры vector и string.66
Совет 13. Используйте vector и string вместо динамических массивов.66
Совет 14. Используйте reserve для предотвращения лишних операций перераспределения памяти.68
Совет 15. Помните о различиях в реализации string.71
Совет 16. Научитесь передавать данные vector и string функциям унаследованного интерфейса.75
Совет 17. Используйте «фокус с перестановкой» для уменьшения емкости.78
Совет 18. Избегайте vector<bool> .80
Глава 3. Ассоциативные контейнеры.83
Совет 19. Помните о различиях между равенством и эквивалентностью.83
Совет 20. Определите тип сравнения для ассоциативного контейнера, содержащего указатели.87
Совет 21. Следите за тем, чтобы функции сравнения возвращали false в случае равенства.91
Совет 22. Избегайте изменения ключа «на месте» в контейнерах set и multiset.93
Совет 23. Рассмотрите возможность замены ассоциативных контейнеров
сортированными векторами.98
Совет 24. Тщательно выбирайте между map::operator[] и map::insert.103
Совет 25. Изучите нестандартные хэшированные контейнеры.107
Глава 4. Итераторы.111
Совет 26. Старайтесь использовать iterator вместо const_iterator, reverse_iterator и const_reverse_iterator.111
Совет 27. Используйте distance и advance для преобразования const_iterator в iterator.114
Совет 28. Научитесь использовать функцию base.117
Совет 29. Рассмотрите возможность использования istreambufjterator при посимвольном вводе.119
Глава 5. Алгоритмы.122
Совет 30. Следите за тем, чтобы приемный интервал имел достаточный размер.123
Совет 31. Помните о существовании разных средств сортировки.127
Совет 32. Сопровождайте вызовы remove-подобных алгоритмов вызовом erase.131
Совет 33. Будьте внимательны при использовании remove-подобных алгоритмов с контейнерами указателей.135
Совет 34. Помните о том, какие алгоритмы получают сортированные интервалы . 138
Совет 35. Реализуйте простые сравнения строк без учета регистра символов с использованием mismatch или lexicographical_compare.141
Совет 36. Правильно реализуйте copy_if.144
Совет 37. Используйте accumulate или for_each для обобщения интервальных данных.146
Глава 6. Функции, функторы и классы функций.151
Совет 38. Проектируйте классы функторов для передачи по значению.151
Совет 39. Реализуйте предикаты в виде «чистых» функций.154
Совет 40. Классы функторов должны быть адаптируемыми.157
Совет 41. Разберитесь, для чего нужны ptr_fun, mem_fun и mem_fun_ref.161
Совет 42. Следите за тем, чтобы конструкция less<T> означала operator<.164
Глава 7. Программирование в STL.167
Совет 43. Используйте алгоритмы вместо циклов.167
Совет 44. Используйте функции контейнеров вместо одноименных алгоритмов.174
Совет 45. Различайте алгоритмы count, find, binary_search, lower_bound, upper_bound и equal_range.177
Совет 46. Передавайте алгоритмам объекты функций вместо функций.184
Совет 47. Избегайте «нечитаемого» кода.187
Совет 48. Всегда включайте нужные заголовки.190
Совет 49. Научитесь читать сообщения компилятора.191
Совет 50. Помните о web-сайтах, посвященных STL.198
Сайт SGI STL.198
СайтБПрог!.200
Сайт Boost.201
Литература.203
Книги, написанные мной.203
Книги, написанные другими авторами.204
Ошибки и опечатки.206
Приложение А Локальные контексты.207
Сравнение строк без учета регистра символов.207
Первая попытка.208
Локальный контекст.210
Локальные контексты в C++.211
Фасет collate.212
Сравнение строк без учета регистра.212
Приложение Б Замечания по поводу платформ STL от Microsoft . 216
Шаблоны функций классов в STL.216
MSVC версий 4-6.217
Обходное решение для MSVC4-5.218
Обходное решение для MSVC6.219
Алфавитный указатель.


Помните о правилах и ограничениях распределителей памяти.
Распределители памяти первоначально разрабатывались как абстракция для моделей памяти, позволяющих разработчикам библиотек игнорировать различия между near- и far-указателями в некоторых 16-разрядных операционных системах (например, DOS и ее зловредных потомках), однако эта попытка провалилась. Распределители также должны были упростить разработку объектных диспетчеров памяти, но вскоре выяснилось, что такой подход снижает эффективность работы некоторых компонентов STL.

Чтобы избежать снижения быстродействия, Комитет по стандартизации C++ включил в Стандарт положение, которое практически выхолостило объектные распределители памяти, но одновременно выражало надежду, что от этой операции их потенциальные возможности не пострадают.
Но это еще не все. Распределители памяти STL, как и operator new с operator new[ ], отвечают за выделение (и освобождение) физической памяти, однако их клиентский интерфейс имеет мало общего с клиентским интерфейсом operator new, operator new[ ] и даже mall ос. Наконец, большинство стандартных контейнеров никогда не запрашивает память у своих распределителей. Еще раз подчеркиваю - никогда. В результате распределители производят довольно странное впечатление.




Бесплатно скачать электронную книгу в удобном формате и читать:

Скачать книгу Эффективное использование STL - Мейерс C. - fileskachat.com, быстрое и бесплатное скачивание.

Скачать




Скачать книгу - Эффективное использование STL - Мейерс C. - depositfiles

Скачать книгу - Эффективное использование STL - Мейерс C. - letitbit
Дата публикации:





Теги: :: ::


Следующие учебники и книги:
Предыдущие статьи:


 


 


Книги, учебники, обучение по разделам




Не нашёл? Найди:





2016-12-04 23:02:42