Назад к вопросам
Junior
107
questionbank
Знаешь ли ты о методах resize и reserve?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Да, знаю.
В контексте стандартных контейнеров C++ (например, std::vector) методы resize и reserve используются для управления размером и емкостью контейнера:
-
reserve(n): Запрашивает, чтобы емкость вектора была не меньше, чемn. Еслиnбольше текущей емкости, выделяется новое хранилище, и элементы перемещаются туда. Емкость может увеличиться, но размер вектора (количество элементов) не меняется.reserveиспользуется для избежания многократных перевыделений памяти при добавлении элементов.#include <vector> int main() { std::vector<int> v; v.reserve(100); // Гарантируем емкость не менее 100 // Размер v все еще 0 // Добавление элементов до 100-го, скорее всего, не вызовет перевыделения return 0; } -
resize(n): Изменяет размер вектора доn.- Если
nменьше текущего размера, элементы послеn-го удаляются. - Если
nбольше текущего размера:- Новые элементы добавляются в конец.
- Если вызывается
resize(n, value), новые элементы инициализируются значениемvalue. - Если вызывается
resize(n), новые элементы инициализируются значением по умолчанию для типа элемента (путем вызова конструктора по умолчанию).
- Емкость вектора может увеличиться для размещения новых элементов, если это необходимо.
#include <vector> int main() { std::vector<int> v = {10, 20, 30}; v.resize(5); // Размер становится 5. Два новых элемента добавлены (инициализированы 0 для int). // v теперь {10, 20, 30, 0, 0} v.resize(2); // Размер становится 2. Элементы 30, 0, 0 удалены. // v теперь {10, 20} v.resize(6, 99); // Размер становится 6. Четыре новых элемента добавлены (инициализированы 99). // v теперь {10, 20, 99, 99, 99, 99} return 0; } - Если
Ключевые отличия:
reserve(n) |
resize(n) / resize(n, value) |
|
|---|---|---|
| Что меняет | Емкость (capacity) | Размер (size) |
| Кол-во элементов | Не меняется | Изменяется до n |
| Инициализация | Не происходит | Новые элементы инициализируются (по умолчанию или указанным value) |
| Перевыделение | Может произойти для достижения емкости n |
Может произойти для достижения размера n |