Синтаксис:
#include <deque> iterator erase( iterator loc ); iterator erase( iterator start, iterator end );
Функция erase() либо удаляет элемент под итератором loc, либо удаляет элементы между start и end (включая start, но не включая end). Возвращаемое значение - итератор на элемент после последнего удаленного элемента.
Первая версия erase (удаляющая один элемент) выполняется за константное время для списков и за линейное время для векторов, двусторонних очередей и строк. Многоэлементная версия erase всегда требует линейное время.
Например:
// Создаем двустороннюю очередь, заполняем ее первыми десятью буквами алфавита deque<char> alphaDeque; for( int i=0; i < 10; i++ ) { alphaDeque.push_back( i + 65 ); } int size = alphaDeque.size(); deque<char>::iterator startIterator; deque<char>::iterator tempIterator; for( int i=0; i < size; i++ ) { startIterator = alphaDeque.begin(); alphaDeque.erase( startIterator ); // Выводим на экран for( tempIterator = alphaDeque.begin(); tempIterator != alphaDeque.end (); tempIterator++ ) { cout << *tempIterator; } cout << endl; }
Код выведет:
BCDEFGHIJ CDEFGHIJ DEFGHIJ EFGHIJ FGHIJ GHIJ HIJ IJ J
В следующем примере erase() вызывается с двумя итераторами в качестве параметров, чтобы удалить несколько элементов из двусторонней очереди:
// Создаем двустороннюю очередь, заполняем ее первыми десятью буквами алфавита deque<char> alphaDeque; for( int i=0; i < 10; i++ ) { alphaDeque.push_back( i + 65 ); } // Выводим полную двустороннюю очередь for( int i = 0; i < alphaDeque.size(); i++ ) { cout << alphaDeque[i]; } cout << endl; // Используем erase, чтобы удалить все элементы двусторонней очереди, кроме первых двух // и последних трех alphaDeque.erase( alphaDeque.begin()+2, alphaDeque.end()-3 ); // Выводим измененную двустороннюю очередь for( int i = 0; i < alphaDeque.size(); i++ ) { cout << alphaDeque[i]; } cout << endl;
После запуска код выведет:
ABCDEFGHIJ ABHIJ