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

erase

Синтаксис:

    #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