Синтаксис:
#include <set> void erase( iterator pos ); void erase( iterator start, iterator end ); size_type erase( const key_type& key ); // возвращает количество удаленных элементов
Функция erase() удаляет элемент в позиции pos, удаляет элементы между start и end или удаляет все элементы, имеющие значение, равное key.
Нужно обращаться аккуратно со всеми контейнерами при вставке или удалении элементов, так как итераторы могут стать недействительными.
В частности, set::erase() делает недействительными только итераторы (и указатели), ссылающиеся на удаляемый элемент.
В примере удаляются некоторые элементы в зависимости от условия (удалятся буквы B и D):
#include <iostream> #include <set> #include <iterator> using namespace std; int main() { // Создаем множество, вставляем в него первые десять букв алфавита set<char> alphas; for( int i=0; i < 10; i++ ) alphas.insert( alphas.end(), i + 65 ); // выводим первоначальное содержимое copy(alphas.begin(), alphas.end(), ostream_iterator<char>(cout, "")); cout << endl; set<char>::iterator iter = alphas.begin(); while( iter != alphas.end() ) { if (*iter == 'B' || *iter == 'D') // В erase() отправляется копия iter, вызывается ++ перед вызовом erase(). // Таким образом, итератор iter остается действительным alphas.erase( iter++ ); else ++iter; } // Выводим измененное содержимое copy(alphas.begin(), alphas.end(), ostream_iterator<char>(cout, "")); cout << endl; }
После запуска код выводит:
ABCDEFGHIJ ACEFGHIJ
Смотри также: clear