Перевод этой страницы?:

erase

Синтаксис:

    #include <list>
    iterator erase( iterator loc );
    iterator erase( iterator start, iterator end );

Функция erase() либо удаляет элемент под итератором loc, либо удаляет элементы между start и end (включая start, но не включая end). Возвращаемое значение - итератор на элемент после последнего удаленного элемента.

Первая версия erase (удаляющая один элемент) выполняется за константное время. Многоэлементная версия erase всегда требует линейное время.

Важное свойство списков состоит в том, что при вставке элементов итераторы не становятся недействительными, даже при удалении недействительным становится только итератор на удаленный элемент.

Порядок итераторов может измениться (то есть после операции со списком у list<T>::iterator'а может появится другой предшествующий или последующий элемент), но сами итераторы не станут недействительными или указывающими на другой элемент (если только эта недействительность или изменение будет явным).

Например:

   // Создаем список, заполняем его первыми десятью буквами алфавита
   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 );
     // Выводим на экран
     copy( alphaList.begin(), alphaList.end(), ostream_iterator<char>(cout) );
     cout << endl;
   }

Код выведет:

   BCDEFGHIJ
   CDEFGHIJ
   DEFGHIJ
   EFGHIJ
   FGHIJ
   GHIJ
   HIJ
   IJ
   J

В следующем примере erase() вызывается с двумя итераторами в качестве параметров, чтобы удалить несколько элементов из списка:

   // Создаем вектор, заполняем его первыми десятью буквами алфавита
   list<char> alphaList;
   for( int i=0; i < 10; i++ ) {
     alphaList.push_back( i + 65 );
   }
   // Выводим полный список
   copy( alphaList.begin(), alphaList.end(), ostream_iterator<char>(cout) );
   cout << endl;
 
    // Используем erase, чтобы удалить все элементы списка, кроме первых двух
    //  и последних трех
   alphaList.erase( advance(alphaList.begin(),2), advance(alphaList.end(),-3) );
   // Выводим измененный список
   copy( alphaList.begin(), alphaList.end(), ostream_iterator<char>(cout) );
   cout << endl;

После запуска код выведет:

   ABCDEFGHIJ
   ABHIJ

Смотри также: clear, insert, pop_back, pop_front, remove, remove_if