Удаление обьектов в std::list
От: Аноним  
Дата: 03.09.06 11:08
Оценка: -1
Здравствуйте.
Возник вопрос — как удалять обьекты в std::list
код

list<int> l;
//init l;
for (list<int>::iterator it = l.begin(); it != l.end(); ++it)
{
if (*it == 0)
{
l.erase(it);
}
}

естественно не работает, т.к после erase(it) it становится невалидным.
Расскажите пожалуйста, кто как решает эту проблему

Спасибо
Re: Удаление обьектов в std::list
От: bnk СССР http://unmanagedvisio.com/
Дата: 03.09.06 11:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Возник вопрос — как удалять обьекты в std::list


В сад? Не, что-то добрые мы сегодня...
У нас в Н-ске горилка с перцем появилась после кризиса

// работает для std::list, std::set, std::map

list<int>::iterator it = l.begin();
while (it != l.end())
{
    if (*it == 0)
        l.erase(it++);
    else
        ++it;
}

// или лучше

l.remove_if( std::bind1st(std::equal_to<int>(), 0) );
Re: Удаление обьектов в std::list
От: vvotan Россия  
Дата: 03.09.06 14:40
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Возник вопрос — как удалять обьекты в std::list

>Расскажите пожалуйста, кто как решает эту проблему

1. list::erase возвращает валидный итератор (см. 23.2.2.3 )
2. remove_if
--
Sergey Chadov

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Удаление обьектов в std::list
От: der_user Россия  
Дата: 03.09.06 21:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте.

А>Возник вопрос — как удалять обьекты в std::list
А>код

А>list<int> l;

А>//init l;
А>for (list<int>::iterator it = l.begin(); it != l.end(); ++it)
А>{
А> if (*it == 0)
А> {
А> l.erase(it);
А> }
А>}

А>естественно не работает, т.к после erase(it) it становится невалидным.

А>Расскажите пожалуйста, кто как решает эту проблему

А>Спасибо


l.remove(value_to_erase);


Нужно отметить, что это тоже приемлемый вариант :

l.remove_if( std::bind1st(std::equal_to<int>(), 0) );


"По воробьям из пушки"

На всякий случай всем читать тов. Мейерса
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.