Я хочу использовать std::string просто для создания динамического буфера, а затем перебирать его с помощью индекса. Является ли resize() единственной функцией для фактического выделения буфера?
Я пробовал использовать функцию backup(), но когда я пытаюсь получить доступ к строке через индекс, она утверждает. Также, когда емкость строки по умолчанию составляет 15 байт (в моем случае), но если я все еще не могу получить к ней доступ как my_string[1]
.
Значит, емкость строки не является фактическим буфером? Кроме того, backup() также не выделяет фактический буфер?
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() вместо backup(), то все работает нормально. Как получается, что строка имеет емкость, но не может получить к ней доступ с помощью []? Разве не в этом смысл резервного() размера, чтобы вы могли получить к нему доступ?
Дополнение В ответ на ответы я хотел бы спросить людей из stl: зачем кому-то использовать резерв(), когда resize() делает то же самое, а также инициализирует строку? Должен сказать, что в данном случае я не очень ценю аргумент производительности. Все, что resize() делает в дополнение к тому, что делает Reserve(), это то, что он просто инициализирует буфер, что, как мы знаем, всегда приятно делать в любом случае. Можем ли мы проголосовать за Reserve() с острова?