Función clear de <vector> en C++
Clase contenedora <vector> en C++
clearEs la función en vector que se utiliza paravaciar todos los elementos, es el método más simple y eficiente para vaciar el contenedor.
cleares una función miembro de la clase contenedora, utilizada paraeliminar todos los elementos del contenedor, lo que hace que el contenedor quede vacío. Después de la llamada, elsize()tamaño se convertirá en 0.
cleares el método estándar para restablecer el contenedor, utilizado a menudo en escenarios donde se necesita reiniciar o liberar memoria.
Definición de la palabra: clearsignifica 'limpiar', es decir, eliminar todos los elementos.
Sintaxis básica y parámetros
cleares una función miembro de la clase contenedora; llamarla no requiere ningún parámetro.
Formato de sintaxis
void clear();
Descripción de parámetros
- Parámetro: sin parámetros
clearNo acepta ningún parámetro.
Descripción de la función
- Valor de retorno:
void(sin valor de retorno). - Efecto: elimina todos los elementos del contenedor,
size()el tamaño se convierte en 0.capacity()La capacidad generalmente permanece sin cambios (depende de la implementación específica). - Nota:
clearno libera la memoria subyacente, la capacidad permanece sin cambios. Si se desea liberar memoria al mismo tiempo, se puede usarswapla técnica.
Ejemplos
Vamos a dominar completamente, mediante una serie de ejemplos,clearsu uso.
Ejemplo 1: Uso básico - Vaciar el contenedor
Ejemplo
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::cout << "Antes de vaciar - size: " << numbers.size()
<< ", capacity: " << numbers.capacity() << std::endl;
// Vaciar todos los elementos
numbers.clear();
std::cout << "Después de vaciar - size: " << numbers.size()
<< ", capacity: " << numbers.capacity() << std::endl;
return 0;
}
Resultado esperado:
清空前 - size: 5, capacity: 5 清空后 - size: 0, capacity: 5
Análisis del código:
clear()va asize()El tamaño se convierte en 0.capacity()La capacidad permanece sin cambios, la memoria no se libera.
Ejemplo 2: Volver a agregar elementos después de vaciar
El contenedor vaciado se puede seguir usando.
Ejemplo
#include <vector>
#include <string>
int main() {
std::vector<std::string> tasks;
// Agregar tareas
tasks.push_back("Aprender C++");
tasks.push_back("Completar la tarea");
tasks.push_back("Leer documentación");
std::cout << "Lista de tareas (" << tasks.size() << " elementos):" << std::endl;
for(const auto& t : tasks) {
std::cout << "- " << t << std::endl;
}
// Vaciar la lista de tareas
tasks.clear();
std::cout << "\n"Después de vaciar (" << tasks.size() << " elementos)" << std::endl;
// Se pueden seguir agregando nuevas tareas
tasks.push_back("Nueva tarea A");
tasks.push_back("Nueva tarea B");
std::cout << "\n"Después de volver a agregar (" << tasks.size() << " elementos):" << std::endl;
for(const auto& t : tasks) {
std::cout << "- " << t << std::endl;
}
return 0;
}
Resultado esperado:
任务列表 (3 项): - 学习 C++ - 完成作业 - 阅读文档 清空后 (0 项) 重新添加后 (2 项): - 新任务 A - 新任务 B
Análisis del código:
clear()Después de vaciar, el contenedor se puede seguir usando.- Como la capacidad permanece sin cambios, no es necesario reasignar memoria al volver a agregar elementos.
Ejemplo 3: Usar empty() para verificar el estado de vaciado
clear()Después, se puede usarempty()para comprobar si el contenedor está vacío.
Ejemplo
#include <vector>
void processData(std::vector<int>& data) {
std::cout << "Procesando datos, actualmente hay " << data.size() << " elementos..." << std::endl;
// Procesar datos...
// Limpiar datos
data.clear();
std::cout << "Datos limpiados" << std::endl;
}
int main() {
std::vector<int> cache = {1, 2, 3, 4, 5};
// Simular el uso de caché
for(int i = 0; i < 3; ++i) {
cache.push_back(cache.size() + 1);
std::cout << "Después de agregar elementos - size: " << cache.size()
<< ", empty: " << (cache.empty() ? "true" : "false") << std::endl;
}
// Vaciar la caché
cache.clear();
std::cout << "Después de vaciar - empty: " << (cache.empty() ? "true" : "false") << std::endl;
return 0;
}
Resultado esperado:
添加元素后 - size: 6, empty: false 添加元素后 - size: 7, empty: false 添加元素后 - size: 8, empty: false 清空后 - empty: true
Análisis del código:
empty()devuelvetrueCuandosize() == 0cuando.clear()después,empty()devuelvetrue。
Ejemplo 4: Liberar memoria por completo
Si se desea liberar memoria al mismo tiempo que se vacían los elementos, se puede usarswapla técnica.
Ejemplo
#include <vector>
int main() {
std::vector<int> numbers;
// Agregar muchos elementos
for(int i = 0; i < 1000; ++i) {
numbers.push_back(i);
}
std::cout << "Antes de vaciar - size: " << numbers.size()
<< ", capacity: " << numbers.capacity() << std::endl;
// Método 1: solo clear (sin liberar memoria)
numbers.clear();
std::cout << "Después de clear() - size: " << numbers.size()
<< ", capacity: " << numbers.capacity() << std::endl;
// Método 2: usar el truco de swap (liberar memoria)
std::vector<int>().swap(numbers);
std::cout << "Después de swap - size: " << numbers.size()
<< ", capacity: " << numbers.capacity() << std::endl;
return 0;
}
Resultado esperado:
清空前 - size: 1000, capacity: 1000 clear() 后 - size: 0, capacity: 1000 swap 后 - size: 0, capacity: 0
Análisis del código:
clear()Solo vacía los elementos, la capacidad permanece sin cambios.std::vectorCrea un vector vacío temporal y lo intercambia con numbers, liberando completamente la memoria.().swap(numbers)
Ejemplo 5: Usar clear en un bucle
Se puede usar en un bucleclearpara restablecer los datos.
Ejemplo
#include <vector>
int main() {
std::vector<int> buffer;
buffer.reserve(100);
// Simular múltiples rondas de procesamiento
for(int round = 1; round <= 3; ++round) {
// Rellenar datos
for(int i = 0; i < 10; ++i) {
buffer.push_back(round * 100 + i);
}
std::cout << "Ronda " << round << " - Procesando datos: ";
for(int n : buffer) {
std::cout << n << " ";
}
std::cout << std::endl;
// Vaciar después de procesar, preparar la siguiente ronda
buffer.clear();
}
std::cout << "Todas las rondas completadas, tamaño final del buffer: " << buffer.size() << std::endl;
return 0;
}
Análisis del código:
clear()Se puede usar en un bucle para restablecer el búfer.- Combinado con
reserveel uso, se puede evitar la asignación frecuente de memoria.
Otras extensiones