Строки имеют емкость и размер. Емкость указывает, сколько символов может содержать строка, прежде чем ей потребуется выделить больше памяти. Размер указывает, сколько символов он в настоящее время содержит. reserve()
может использоваться для установки минимальной емкости строки (она выделит память для как минимум этого количества символов, но может выделить больше).
Это в первую очередь важно, если вы увеличиваете размер строки. Когда вы объединяете строку с +=
или append()
, символы из данной строки будут добавлены в конец текущей. Если увеличение строки до этого размера не превышает емкость, то она просто использует емкость, которая у нее есть. Однако, если новый размер превысит текущую емкость, строка должна будет перераспределить память внутри и скопировать свои внутренние данные в новую память. Если вы собираетесь делать это много, это может дорого обойтись (хотя это делается в амортизированном постоянном времени), поэтому в таком случае вы можете использовать reserve()
для предварительного выделения достаточного количества памяти, чтобы уменьшить частоту перераспределения. иметь место.
вектор-функции в основном одинаковы с теми же функциями.
Лично, хотя я имел дело с capacity()
и reserve()
с вектором время от времени, я никогда не видел особой необходимости делать это со строкой - вероятно, потому что я обычно не делаю достаточно конкатенаций строк в мой код для того, чтобы это того стоило. В большинстве случаев конкретная строка может получить несколько конкатенаций, но этого недостаточно, чтобы беспокоиться о ее емкости. Беспокойство по поводу емкости - это обычно то, что вы делаете, когда пытаетесь оптимизировать свой код.