Syntaxe:
#include <list> iterator erase( iterator pos ); iterator erase( iterator inicio, iterator fim );
A primeir função apaga o elemento na posição pos, e a segunda apaga os elementos entre inicio e fim (incluindo inicio e excluindo fim). Ambas retornam um iterador apontando para o elemento imediatamente após o último elemento apagado.
A primeira versão de erase executa em tempo constante. A versão que apaga múltiplos elementos executa em tempo linear.
Listas têm a importante propriedade de que inserção e divisão não invlidam iteradores para elementos da lista, e a remoção de elementos invalida apenas os iteradores que apontam para os elementos retirados.
A ordem dos iteradores pode mudar (ou seja, list<T>::iterator pode ter um antecessor ou sucessos diferente após as operações), mas os iteradores em si não serão invalidados ou apontarão para elementos diferentes a não ser que essa mudança seja explícita e proposital.
Por exemplo:
// Cria uma lista, e a preenche com os dez primeiros caracteres do alfabeto list<char> alphaList; for( int i=0; i < 10; i++ ) { alphaList.push_back( i + 65 ); } int size = alphaList.size(); list<char>::iterator startIterator; list<char>::iterator tempIterator; for( int i=0; i < size; i++ ) { startIterator = alphaList.begin(); alphaList.erase( startIterator ); // Display the list copy( alphaList.begin(), alphaList.end(), ostream_iterator<char>(cout) ); cout << endl; }
O código acima gera a seguinte saída:
BCDEFGHIJ CDEFGHIJ DEFGHIJ EFGHIJ FGHIJ GHIJ HIJ IJ J
No próximo exemplo, erase() é chamada com dos iteradores para apagar um intervalos de elementos de uma lista:
// Cria uma lista, e a preenche com os dez primeiros caracteres do alfabeto list<char> alphaList; for( int i=0; i < 10; i++ ) { alphaList.push_back( i + 65 ); } // Mostra a lista completa copy( alphaList.begin(), alphaList.end(), ostream_iterator<char>(cout) ); cout << endl; // Usar erase para retirar todos os elementosda lista, menos // os dois primeiros e os três últimos alphaList.erase( advance(alphaList.begin(),2), advance(alphaList.end(),-3) ); // Mostrar a lista modificada copy( alphaList.begin(), alphaList.end(), ostream_iterator<char>(cout) ); cout << endl;
O código acima gera como saída:
ABCDEFGHIJ ABHIJ
Tópicos relacionados: clear, insert, pop_back, pop_front, remove, remove_if