Читать «Стандарты программирования на С++. 101 правило и рекомендация» онлайн - страница 129
Андрей Александреску
Если контейнер имеет собственную версию remove
или remove_if
, желательно использовать именно ее.
Исключения
Описанная идиома "горячей усадки" не работает с реализациями std::string
с копированием при записи. Обычно работает вызов s.reserve(0)
или такой трюк, как string(s.begin(), s.end()).swap(s);
, в котором использован конструктор на основе двух итераторов. На практике эти методы обычно работают и устраняют излишнюю емкость. (Было бы еще лучше, чтобы реализации std::string
не использовали такой устаревший метод оптимизации, как копирование при записи; см. [Sutter02].)
Ссылки
STL: алгоритмы
Предпочитайте алгоритмы циклам.
— Бьярн Страуструп (Bjarne Stroustrup),
[Stroustrup00] §18.12
Алгоритмы представляют собой циклы — только они лучше циклов. Алгоритмы — это "шаблоны" циклов, с добавлением дополнительной семантики по сравнению с простыми for
и do
. Конечно, начав использовать алгоритмы, вы начнете использовать и функциональные объекты и предикаты; корректно пишите их и широко используйте в своих программах.
В этом разделе мы считаем наиболее значимой рекомендацию 83 — "Используйте отладочную реализацию STL".
83. Используйте отладочную реализацию STL
Резюме
Безопасность превыше всего (см. рекомендацию 6). Используйте отладочную реализацию STL, даже если она имеется только для одного из ваших компиляторов, и даже если она используется только для отладочного тестирования.
Обсуждение
Так же, как легко ошибиться при работе с указателями, легко допустить и ошибку при работе с итераторами, причем такую, что программа при этом успешно компилируется, а при работе немедленно аварийно завершается (в лучшем случае) или работает неверно (в худшем). Даже если ваш компилятор не обнаружил ни одной ошибки, вы не должны полагаться на "визуальный контроль": имеются специальные инструменты — воспользуйтесь ими.
Ряд ошибок при работе с STL часто допускают даже опытные программисты.
•
•
•
• insert
), но с передачей итератора, который указывает в другой контейнер.
•