Последнее обновление:2026-10-12
C++ vector resize и reserve¶
В C++ resize и reserve — это две членские функции контейнеров (например, std::vector), предназначенные для управления размером vector и распределением памяти.
Например:
std::vector<int> v1;
v1.resize(1000); //allocation + instance creation
cout <<(v1.size() == 1000)<< endl; //prints 1
cout <<(v1.capacity()==1000)<< endl; //prints 1
std::vector<int> v2;
v2.reserve(1000); //only allocation
cout <<(v2.size() == 1000)<< endl; //prints 0
cout <<(v2.capacity()==1000)<< endl; //prints 1
Функция resize используется для изменения размера контейнера — она может увеличить или уменьшить количество элементов в контейнере. При увеличении размера контейнера добавляемые элементы будут инициализированы. При уменьшении размера контейнера элементы, выходящие за новый размер, будут удалены.
Функция reserve используется для предварительного выделения памяти контейнера без изменения его размера. Её можно применять для заблаговременного выделения достаточного объёма памяти, чтобы избежать частых перераспределений и тем самым повысить производительность. Однако вызов reserve не меняет размер контейнера — он лишь выделяет для контейнера достаточно памяти.
Обратите внимание: доступность функций resize и reserve различается в зависимости от типа контейнера. Функция resize доступна для большинства типов контейнеров, тогда как reserve действительна только для контейнеров с динамическим размером, например std::vector и std::deque. Для контейнеров фиксированного размера (например, std::array) вызов reserve не даёт никакого эффекта.
С точки зрения исходного кода:
void resize(size_type new_size, value_type value = value_type()) {
if (new_size < size()) {
erase(begin() + new_size, end()); // 移除超出新大小的元素
} else {
insert(end(), new_size - size(), value); // 添加新元素
}
}
void reserve(size_type _n) {
if (__n > max_size())
__throw_length_error(__N("vector::reserve"));
if (capacity() < __n)
_M_reallocate(__n);
}
На этом раздел окончен
Похожие темы¶
- C++ чисто виртуальные функции и абстрактные классы | C++那些事
- C++ утверждения assert | C++那些事
- C++ битовые поля | C++那些事
- Реализация полиморфизма C++ на языке C | C++那些事
- C++ константы const и его модификация | C++那些事
- C++ всё семейство const | C++那些事
- C++ оператор разыменования * | C++那些事
- C++ инициализация и присваивание | C++那些事
- C++ возврат нескольких значений | C++那些事
- C++ ключевое слово mutable | C++那些事