Шрифт:
• Почти все контейнеры объявляются в одноименных заголовках, то есть
• Все алгоритмы, за исключением четырех, объявляются в заголовке
• Специализированные разновидности итераторов, включая
• Стандартные функторы (например
Не забывайте включать соответствующую директиву
Совет 49. Научитесь читать сообщения компилятора
При определении вектора в программе вы имеете полное право указать конкретный размер:
Объекты string имеют много общего с vector, поэтому кажется, что следующая команда тоже допустима:
Однако эта команда не компилируется, поскольку у контейнера
Ну как, впечатляет? Первая часть сообщения выглядит как беспорядочное нагромождение символов, вторая часть ссылается на распределитель памяти, ни разу не упоминавшийся в исходном тексте, а в третьей части что-то говорится о вызове конструктора. Конечно, третья часть содержит вполне точную информацию, но для начала разберемся с первой частью, типичной для диагностики, часто встречающейся при работе со
Вспомните, что
Это связано с тем, что понятие строки C++ было обобщено до последовательности символов произвольного типа, обладающих произвольными характеристиками («traits») и хранящихся в памяти, выделенной произвольными распределителями. Все
Такая запись весьма близка к той, что встречается в приведенной выше диагностике, но разные компиляторы могут описывать
Имена