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

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

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

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

10.12.2011, 10:13. Просмотров 781. Ответов 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
Посмотрите здесь:

Static std::list - C++
Добрый день, помогите решить проблему. &quot;Каждое статическое поле должно быть проинициализировано до main() явным образом&quot; - как я помню...

Сортировка std::list - C++
Есть такой фрагмент програми. Создаю функцию для сортировки list. Вроде все правильно. В класе перегружены оператори &lt; i =. Не знаю что...

Вопросы по std::list - C++
1. Как обменять в списке два его элемента? Желательно большое быстродействие :) т.е. без удалить оба а потом добавить в другом порядке,...

Remove_if для std::list - C++
Здравствуйте! Помогите мне разобраться,пожалуйста.Перечитал кучу всего,но так и не понял ,что можно писать в аргументе метода remove_if. ...

Std::list, ошибка LNK2019 - C++
Добрый день! // element.h class Element { public: Element(){}; ~Element(){};

Реализация std::list<>::begin() - C++
Вопрос строго для знатоков реализации STL. Каким образом реализована &quot;перегрузка&quot; у списка метода begin() только по возвращаемому...

Передача std::list<> в функцию - C++
Нужно передать список строк в функцию. У меня сделано так: void f(list&lt;string&gt;&amp; list1) {...} т.е. по ссылке передаю ...

Непосредственное удаление из std::list - C++
Собственно проблема вот в чем раньше, когда я создавал игру, у меня были самодельные листы типа struct List { T data; ...

std::list<T*> вызвать метод - C++
Как во время просмотра MyList вызвать метод Show() каждого обьекта? class MyVehicle { public: virtual void Show() { /* ......

Скорость вставки и удаления в Std::list - C++
в википедии написано: я никак не пойму как в двусвязном списке может быть быстрая вставка и удаление, ведь чтобы найти нужный элемент...

std::list - преобразование типов в контейнере - C++
Здравствуйте. Суть проблемы попробую передать в коде class A { }; class B : public A { public: B (int) {/*...*/}...

Бинарный поиск для std::list - C++
Здравствуйте. Хотел написать бинарный поиск для std::list. Пишу: //Тип coord определён выше std::list&lt;coord&gt;::iterator...


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

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

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