Шрифт:
Один из интересных аспектов поведения string, не следующий непосредственно из этих диаграмм, относится к стратегии выделения памяти для малых строк. В некоторых реализациях устанавливается минимальный размер выделяемого блока памяти; к их числу принадлежат реализации A, C и D. Вернемся к команде
В реализации A минимальный размер выделяемого буфера равен 32 символам. Таким образом, хотя размер s во всех реализациях равен 5 символам, емкость этого контейнера в реализации A равна 31 (видимо, 32-й символ зарезервирован для завершающего нуль-символа, упрощающего реализацию функции
Из сказанного очевидно следует, что стратегия выделения памяти для малых строк может сыграть важную роль, если вы собираетесь работать с большим количеством коротких строк и (1) в вашей рабочей среде не хватает памяти или (2) вы стремитесь по возможности локализовать ссылки и пытаетесь сгруппировать строки в минимальном количестве страниц памяти.
Конечно, в выборе реализации
• По отношению к содержимому
• Объекты
• Создание нового объекта
• Объекты
• Объекты
• В разных реализациях могут использоваться разные стратегии ограничения размеров выделяемого блока.
Только не поймите меня превратно. Я считаю, что контейнер
Кроме того, на концептуальном уровне контейнер
Совет 16. Научитесь передавать данные vector и string функциям унаследованного интерфейса
С момента стандартизации C++ в 1998 году элита C++ настойчиво подталкивает программистов к переходу с массивов на vector. Столь же открыто пропагандируется переход от указателей
Но на этом пути остаются некоторые препятствия, из которых едва ли не самым распространенным являются унаследованные интерфейсы языка C, работающие с массивами и указателями
К счастью, задача решается просто. Если у вас имеется
Рассмотрим следующее объявление:
Выражение
Передача данных должна происходить так: