Translations of this page?:

erase

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

 
• • • SitemapRecent changesRSScc