Eliminación eficaz de elementos de std::vector mientras se itera
En el ámbito de la programación en C, los desarrolladores a menudo se enfrentan al desafío de manipular un estándar ::vector mientras atraviesa sus elementos. Si bien los iteradores proporcionan un mecanismo conveniente para esta tarea, surge un error común al intentar eliminar elementos durante la iteración.
Considere el escenario donde se usa un std::vector<:string> para almacenar una lista de rutas a archivos. El objetivo es eliminar cada archivo y eliminar su ruta del vector. Sin embargo, el uso de métodos tradicionales, como el método erase(), invalida los iteradores después de cada eliminación, lo que complica el recorrido posterior.
Para superar esta limitación, los desarrolladores han ideado un enfoque más eficiente. El método erase(), cuando se invoca, no sólo elimina el elemento designado sino que también devuelve un nuevo iterador que apunta al siguiente elemento. Este comportamiento único permite una continuación fluida del bucle:
std::vector<:string>::iterator iter;
for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) {
if (::DeleteFile(iter->c_str()))
iter = m_vPaths.erase(iter);
else
iter;
}
En este fragmento de código, el bucle continúa según lo previsto, y iter se actualiza automáticamente para apuntar al siguiente elemento válido después de cada eliminación. Este método eficiente elimina la necesidad de un vector adicional y agiliza el proceso de eliminación de elementos durante la iteración.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3