"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 > Por que `std::remove` reorganiza os elementos em vez de excluí-los em C++?

Por que `std::remove` reorganiza os elementos em vez de excluí-los em C++?

Publicado em 19/11/2024
Navegar:310

  Why Does `std::remove` Rearrange Elements Instead of Deleting Them in C  ?

Compreendendo a diferença: apagar vs. remover

No domínio da programação C, std::erase e std::remove são dois funções distintas que atendem a propósitos diferentes quando se trata de modificar contêineres. Embora ambas as funções possam ser usadas para eliminar elementos de um contêiner, elas diferem em seu comportamento.

Std::remove: Reorganizando elementos vs. remove é um algoritmo que opera em uma variedade de elementos e os reorganiza dentro do contêiner. Ele não exclui diretamente nenhum elemento, mas move os elementos não correspondentes sobre os correspondentes. Este processo cria um cluster de elementos correspondentes no início da sequência e elementos não correspondentes no final.

Std::erase: Deleting Elements

No por outro lado, std::erase é uma função que remove elementos especificados de um contêiner, reduzindo efetivamente seu tamanho. Ele usa um intervalo de iteradores como argumentos e exclui todos os elementos dentro desse intervalo, incluindo os elementos marcados para remoção.

Compreendendo a saída

No exemplo de código fornecido, as seguintes observações podem ser feitas:

Std::remove:
    Quando std::remove é usado sem std::erase, ele simplesmente reorganiza os elementos, deixando o tamanho do vetor inalterado. Portanto, iterar pelo vetor resultará na saída de 2,2.
  1. Std::erase:
  2. Quando std::erase é usado em conjunto com std::remove, ele remove os elementos correspondentes (neste caso, a única ocorrência de 1) e atualiza o tamanho do vetor de acordo. Como resultado, a saída mostra apenas 2.
  3. Notas adicionais sobre Std::remove

Uso fora de Erase-Remove Idioma:
    Embora std::remove seja comumente usado com apagar como parte do "idioma apagar-remover", ele também pode ser empregado de forma independente. É útil em cenários onde a ordem de remoção não é crucial e o objetivo principal é separar elementos correspondentes e não correspondentes dentro do contêiner.
  1. Justificativa para não exclusão:
  2. O design de std::remove que não envolve exclusão decorre de sua capacidade de trabalhar com iteradores de encaminhamento arbitrários. Esses iteradores podem não ter a capacidade de excluir elementos, daí a funcionalidade limitada de std::remove.
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