Форум программистов, компьютерный форум CyberForum.ru

Вопрос по std::list - C++

Восстановить пароль Регистрация
 
Genghis
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 18
10.12.2011, 10:13     Вопрос по std::list #1
Не произойдёт ли здесь какая-нибудь ошибка после удаления элемента из списка?
C++
1
2
3
4
5
6
7
std::list<int> myList;
std::list<int>::iterator iter;
 
/* различные действия со списком */
 
myList.remove(*iter);
++iter;
Добавлено через 11 минут
И что будет хранить iter после ++ : элемент, который следует после удалённого элемента, или элемент, который следует после следующего, за удалённым элементом?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2011, 10:13     Вопрос по std::list
Посмотрите здесь:

Вопросы по std::list C++
C++ std::list<T*> вызвать метод
Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int') C++
C++ Сортировка std::list
Передача std::list<> в функцию C++
C++ Remove_if для std::list
Static std::list C++
Реализация std::list, сложность list::size() C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
10.12.2011, 12:37     Вопрос по std::list #2
в общем случае это ошибка.
Итераторы не содержат в себе значения, они ссылаются на то, что хранится в контейнере. После того, как вы удаляете из контейнера что-то по итератору, то, на что ссылается итератор уже удалено. Итератор становится невалидным. Поэтому дальше что-то делать с итератором некорректно. Есть аналогия с указателями: операции с невалидным итератором это как операции с указателем, для которого позвали delete, т.е. операции с мертвым объектом. А операции с мертвыми объектами - это ошибка.
Это у вас было удаление из списка всех елементов с определенным значением. В списке есть также пара других ф-ий удления, которые работают с итераторами
http://www.cplusplus.com/reference/stl/list/erase/
Вот одна из них:
C++
1
iterator erase ( iterator position );
Она вовзвращает валидный итератор и это не просто так. Тот итератор, который ей на вход отдавали после отработки ф-ии становится невалидным.
Yandex
Объявления
10.12.2011, 12:37     Вопрос по std::list
Ответ Создать тему
Опции темы

Текущее время: 14:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru