С++ для начинающих


Удаление


В общем случае удаление осуществляется двумя формами функции-члена 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();

}



Содержание раздела