"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como remover elementos com segurança de um std::vector durante a iteração?

Como remover elementos com segurança de um std::vector durante a iteração?

Publicado em 2024-11-14
Navegar:531

How to Safely Remove Elements from a std::vector While Iterating?

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.

Tutorial mais recente Mais>

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