STL <list> Как удалять элементы?
Портится только итератор на удаленный элемент. Сдвигай итератор до удаления.
list::remove_if
![](/images/graemlins/smile.gif)
![](/images/graemlins/smile.gif)
MSVC-шный erase возвращает инкремент итератора.
#include <list>
...
list<int> l;
l.push_back (1);
l.push_back (2);
l.push_back (3);
l.push_back (4);
l.push_back (3);
for (i = l.begin ; i != l.end; ++i)
{
if *i) == 3)
i = l.erase(i);
}
И тебе пасиб
![](/images/graemlins/smile.gif)
![](/images/graemlins/smile.gif)
MSVC-шный erase
Не надо использовать платформозависимые вещи. Стыдно должно быть за упоминание M$ в треде по STL.
![](/images/graemlins/laugh.gif)
The iterator returned from a.erase(q) points to the element immediately following q prior to the element being erased. If no such element exists, a.end is returned.
a - sequence
list<int> l;
list<int>::iterator it1, it2;
l.push_back(1);
l.push_back(2);
l.push_back(3);
l.push_back(4);
l.push_back(5);
it1 = ++++l.begin;
it2 = l.erase(it1);
it2 -> 4
it1 -> говно (по понятным причинам)
где хуйня, че-то не врублюсь?
![](/images/graemlins/smile.gif)
![](/images/graemlins/frown.gif)
Я перепутал ассоциативные контейнеры с последовательностями, вопрос снят с повестки дня.
Просто интересно, что еще такого? (сравнивая stl 2005-й студии, конешно, старое в пизду)
в мс-овском stl-e у std::exception есть еще конструктор с char const *,
Ну и нахуя это надо? есть же std::logic_error
в майкрософте прогерам моча в голову ударила
мне интересно, что еще, раз уж ты написал, что должно быть стыдно?
hash_map'а вроде, например, нет.
все понятно...
оно ?
не http://www.sgi.com/tech/stl/Sequence.html
А что там не так?
Erase a.erase(p) p is a dereferenceable iterator in a. Destroys the element pointed to by p and removes it from a. [3] a.size is decremented by 1. The relative order of the other elements in the sequence is unchanged. The return value is an iterator to the element immediately following the one that was erased.>где хуйня, че-то не врублюсь?
А что там не так?
Вроде еще prev_permutation для контейнера с равными элементами неадекватно работает (по крайней мере в 7 студии все еще есть этот баг). При этом next_permutation работает правильно. Может ужо подправили (дело было в том, что перепутаны (a < b) и !(b < a
Просто интересно, что еще такого? (сравнивая stl 2005-й студии, конешно, старое в пизду)
![](/images/graemlins/smile.gif)
2Пеонизд: кури мсдн все таки.
ЗЫ На С++ не пишу
2Пеонизд: кури мсдн все таки.
Ты последний, у кого я спрошу совета. Особенно после такого:
ЗЫ На С++ не пишу
Стоит ли изучать всякие STLport, boost и другие.
А чем хреново STL - что то некоторые пишут, что лучше отказаться от шаблонов...
В последовательных списках erase ведет себя зачотно )
и что тебе мешает самому туда посмотреть?
![](/images/graemlins/frown.gif)
Вообщем с этим понятно.
А что с либами?
это не связано конкретно с твоим вопросом, но иногда буст очень сильно упрощает жизнь
P.S. Сильно не пинайте, я начинающий прогер на С++
![](/images/graemlins/smile.gif)
ну все зависит от того, какие бустовские библиотеки ты используешь
Оставить комментарий
0000
Хоцца удалять элементы, которые удовлетворяют некоторому условию.Такой код не прокатывает (судя по всему после удаления элемента надо заново инициализировать итератор)
Единственное, что пришло в голову, это организовать цикл, где если элемент найден, то удалить его и заново проинициализировать итератор. Но че то мне кажется можно проще, без нескольких пробегов списка.
Вопрос - как?