Alterando Listas

julho 27, 2014 - C++ / Programação

Algo muito comum em programas envolvendo listas e outros tipos de containers em C++ é a necessidade de se remover elementos dos mesmos, frequentemente durante algum processo de varredura ou de enumeração de seus elementos. Embora isso possa parecer uma tarefa simples e inocente, a remoção do elemento atual de um loop pode tornar o elemento de iteração inconsistente ou a própria lista, ou ambos. Isso pode fazer com que o loop seja encerrado prematuramente ou que jamais venha a ser encerrado.

O que se faz a seguir está errado:

As próprias rotinas do Standard Template Library (STL) da linguagem C++ já consideram a possibilidade do elemento atual do loop ser removido. Assim, tanto o método erase() como o método remove() da classe container retornam um novo objeto iterator, que pode substituir com segurança aquele utilizado pelo loop.

O código correto é semelhante:

Uma outra maneira, bastante elegante, de chegar ao mesmo resultado, sem contudo alterar a lista original durante o loop, consiste em criar uma segunda lista, contendo somente os elementos que devem permanecer. Ao final do processamento do loop, substitui-se a primeira lista pela segunda.

 

› tags: C++ /

Deixe um comentário

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">