Remoção eficaz de elementos do std::vector durante a iteração
No domínio da programação C, os desenvolvedores geralmente encontram o desafio de manipular um std ::vector enquanto percorre seus elementos. Embora os iteradores forneçam um mecanismo conveniente para esta tarefa, uma armadilha comum surge ao tentar remover elementos durante a iteração.
Considere o cenário em que um std::vector<:string> é usado para armazenar uma lista de caminhos para arquivos. O objetivo é deletar cada arquivo e remover seu caminho do vetor. No entanto, o uso de métodos tradicionais, como o método erase(), invalida os iteradores após cada exclusão, complicando a travessia adicional.
Para superar essa limitação, os desenvolvedores desenvolveram uma abordagem mais eficiente. O método erase(), quando invocado, não apenas remove o elemento designado, mas também retorna um novo iterador apontando para o próximo elemento. Esse comportamento exclusivo permite uma continuação suave do loop:
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;
}
Neste trecho de código, o loop continua conforme planejado, com o iter sendo atualizado automaticamente para apontar para o próximo elemento válido após cada exclusão. Este método eficiente elimina a necessidade de um vetor adicional e agiliza o processo de remoção de elementos durante a iteração.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3