Удаление
В общем случае удаление осуществляется двумя формами функции-члена erase(). Первая форма удаляет единственный элемент, вторая– диапазон, отмеченный парой итераторов. Для последнего элемента можно воспользоваться функцией-членом pop_back().
При вызове erase() параметром является итератор, указывающий на нужный элемент. В следующем фрагменте кода мы воспользуемся обобщенным алгоритмом find() для нахождения элемента и, если он найден, передадим его адрес функции-члену erase().
string searchValue( "Quasimodo" ); list< string >::iterator iter = find( slist.begin(), slist.end(), searchValue ); if ( iter != slist.end() ) |
slist.erase( iter );
Для удаления всех элементов контейнера или некоторого диапазона можно написать следующее:
// удаляем все элементы контейнера slist.erase( slist.begin(), slist.end() ); // удаляем элементы, помеченные итераторами list< string >::iterator first, last; first = find( slist. begin(), slist.end(), vail ); last = find( slist.begin(), slist.end(), va12 ); // ... проверка first и last |
slist.erase( first, last );
Парной по отношению к push_back()
является функция-член pop_back(), удаляющая из контейнера последний элемент, не возвращая его значения:
vector< string >::iterator iter = buffer.begin(); for ( ; iter != buffer.end(), iter++ ) { slist.push_back( *iter ); if ( ! do_something( slist )) slist.pop_back(); |
}