Última actualización:2026-10-12
resize y reserve en vector de C++¶
En C++, resize y reserve son dos funciones miembro de los contenedores (por ejemplo std::vector) que sirven para gestionar el tamaño del vector y la asignación de memoria.
Por ejemplo:
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
La función resize sirve para cambiar el tamaño del contenedor, aumentando o reduciendo el número de elementos del contenedor. Cuando se aumenta el tamaño del contenedor, los elementos añadidos se inicializan. Cuando se reduce el tamaño del contenedor, los elementos que exceden el nuevo tamaño se eliminan.
La función reserve sirve para preasignar el espacio de memoria del contenedor, sin cambiar su tamaño. Puede usarse para asignar de antemano memoria suficiente y evitar reasignaciones de memoria frecuentes, mejorando así el rendimiento. Ahora bien, llamar a reserve no cambia el tamaño del contenedor; solo le asigna espacio de memoria suficiente.
Conviene tener en cuenta que la disponibilidad de las funciones resize y reserve varía según el tipo de contenedor. La función resize está disponible para la mayoría de los tipos de contenedores, mientras que la función reserve solo es válida para los contenedores de tamaño dinámico, como std::vector y std::deque. Para los contenedores de tamaño fijo (por ejemplo std::array), llamar a reserve no tiene ningún efecto.
Desde el punto de vista del código fuente:
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);
}
Fin de esta sección
Temas relacionados¶
- Funciones virtuales puras y clases abstractas en C++ | C++那些事
- Aserciones assert en C++ | C++那些事
- Campos de bits en C++ | C++那些事
- Implementar el polimorfismo de C++ en lenguaje C | C++那些事
- const en C++: constantes y modificación | C++那些事
- La familia completa de const en C++ | C++那些事
- El operador de desreferencia * en C++ | C++那些事
- Inicialización y asignación en C++ | C++那些事
- Formas de devolver varios valores en C++ | C++那些事
- La palabra clave mutable en C++ | C++那些事