Синтаксис:
#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