Совет 1. Внимательно подходите к выбору контейнера
Совет 2. Остерегайтесь иллюзий контейнерно-независимого кода
Совет 3. Реализуйте быстрое и корректное копирование объектов в контейнерах
Совет 4. Вызывайте empty вместо сравнения size() с нулем
Совет 5. Используйте интервальные функции вместо одноэлементных
Совет 6. Остерегайтесь странностей лексического разбора C++
Совет 7. При использовании контейнеров указателей, для которых вызывался оператор new, не забудьте вызвать delete для указателей перед уничтожением контейнера
Совет 8. Никогда не создавайте контейнеры, содержащие auto_ptr
Совет 9. Тщательно выбирайте операцию удаления
Совет 10. Помните о правилах и ограничениях распределителей памяти
Совет 11. Учитывайте область применения пользовательских распределителей памяти
Совет 12. Разумно оценивайте потоковую безопасность контейнеров STL
Контейнеры vector и string
***
Совет 13. Используйте vector и string вместо динамических массивов
Совет 14. Используйте reserve для предотвращения лишних операций перераспределения памяти
Совет 15. Помните о различиях в реализации string
Совет 16. Научитесь передавать данные vector и string функциям унаследованного интерфейса
Совет 17. Используйте «фокус с перестановкой» для уменьшения емкости
Совет 18. Избегайте vector
Ассоциативные контейнеры
***
Совет 19. Помните о различиях между равенством и эквивалентностью
Совет 20. Определите тип сравнения для ассоциативного контейнера, содержащего указатели
Совет 21. Следите за тем, чтобы функции сравнения возвращали false в случае равенства
Совет 22. Избегайте изменения ключа «на месте» в контейнерах set и multiset
Совет 23. Рассмотрите возможность замены ассоциативных контейнеров сортированными векторами
Совет 24. Тщательно выбирайте между map::operator[] и map::insert
Совет 25. Изучите нестандартные хэшированные контейнеры
Итераторы
***
Совет 26. Старайтесь использовать iterator вместо const_iterator, reverse_iterator и const_reverse_iterator
Совет 27. Используйте distance и advance для преобразования const_iterator в iterator
Совет 28. Научитесь использовать функцию base
Совет 29. Рассмотрите возможность использования istreambuf_iterator при посимвольном вводе
Алгоритмы
***
Совет 30. Следите за тем, чтобы приемный интервал имел достаточный размер
Совет 31. Помните о существовании разных средств сортировки
Совет 32. Сопровождайте вызовы remove-подобных алгоритмов вызовом erase
Совет 33. Будьте внимательны при использовании remove-подобных алгоритмов с контейнерами указателей
Совет 34. Помните о том. какие алгоритмы получают сортированные интервалы
Совет 35. Реализуйте простые сравнения строк без учета регистра символов с использованием mismatch или lexicographical_compare
Совет 36. Правильно реализуйте copy_if
Совет 37. Используйте accumulate или for_each для обобщения интервальных данных
Функции, функторы и классы функций
***
Совет 38. Проектируйте классы функторов для передачи по значению
Совет 39. Реализуйте предикаты в виде «чистых» функций
Совет 40. Классы функторов должны быть адаптируемыми
Совет 41. Разберитесь, для чего нужны ptr_fun, mem_fun и mem_fun_ref
Совет 42. Следите за тем, чтобы конструкция less означала operator
Программирование в STL
***
Совет 43. Используйте алгоритмы вместо циклов
Совет 44. Используйте функции контейнеров вместо одноименных алгоритмов
Совет 45. Различайте алгоритмы count, find, binary_search, lower_bound, upper_bound и equal_range
Совет 46. Передавайте алгоритмам объекты функций вместо функций