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

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

Войти
Регистрация
Восстановить пароль
 
Genghis
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 18
#1

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

10.12.2011, 10:13. Просмотров 743. Ответов 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
std::list - преобразование типов в контейнере C++
C++ std::list<T*> вызвать метод
C++ Сортировка std::list
Передача std::list<> в функцию C++
C++ Remove_if для std::list
Static std::list C++
C++ Скорость вставки и удаления в Std::list
Непосредственное удаление из std::list C++
C++ Std::list, ошибка LNK2019
Реализация std::list<>::begin() C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1479 / 1055 / 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
Ответ Создать тему
Опции темы

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