Я хотел использовать std::string просто для создания динамического буфера и для повторения его с помощью индекса. Является ли resize() единственной функцией для фактического выделения буфера?
Я попробовал reserve(), но когда я пытаюсь получить доступ к строке через индекс, он утверждает. Кроме того, когда размер строки по умолчанию составляет 15 байт (в моем случае), но если я все еще не могу получить к нему доступ как my_string[1]
.
Итак, емкость строки не является фактическим буфером? Также reserve() также не выделяет фактический буфер?
string my_string;
// I want my string to have 20 bytes long buffer
my_string.reserve( 20 );
int i = 0;
for ( parsing_something_else_loop )
{
char ch = <business_logic>;
// store the character in
my_string[i++] = ch; // this crashes
}
Если я сделаю resize() вместо reserve(), это будет отлично. Как получается, что строка имеет емкость, но не может реально получить к ней доступ с помощью []? Разве это не значит, что размер зарезервирован(), чтобы вы могли получить к нему доступ?
Дополнительные В ответ на ответы, я хотел бы спросить людей stl. Почему кто-то использовал reserve(), когда resize() делает то же самое, а также инициализирует строку? Должен сказать, что я не очень ценю аргумент производительности в этом случае. Все, что resize() делает дополнительным к тому, что делает backup(), состоит в том, что он просто инициализирует буфер, который, как мы знаем, всегда приятно делать в любом случае. Можем ли мы проголосовать за резерв() с острова?