Содержание

  • Предисловие
  • Благодарности
  • ***
  • От издательства
  • Введение
  • ***
  • Определение, использование и расширение STL
  • Ссылки
  • STL и Стандарты
  • Подсчет ссылок
  • string и wstring
  • Терминология
  • Примеры
  • Вопросы эффективности
  • Рекомендации
  • Контейнеры
  • ***
  • Совет 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. Передавайте алгоритмам объекты функций вместо функций
  • Совет 47. Избегайте «нечитаемого» кода
  • Совет 48. Всегда включайте нужные заголовки
  • Совет 49. Научитесь читать сообщения компилятора
  • Совет 50. Помните о web-сайтах, посвященных STL
  • Литература
  • ***
  • Книги, написанные мной
  • Книги, написанные другими авторами
  • Ошибки и опечатки
  • Локальные контексты
  • ***
  • Сравнение строк без учета регистра символов
  • Первая попытка
  • Локальный контекст
  • Локальные контексты в C++
  • Фасет collate
  • Сравнение строк без учета регистра
  • Замечания по поводу платформ STL от Microsoft
  • ***
  • Шаблоны функций классов в STL
  • MSVC версий 4-6
  • Обходное решение для MSVC4-5
  • Обходное решение для MSVC6