Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Genghis
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 18
#1

Вопрос по std::list

10.12.2011, 10:13. Просмотров 900. Ответов 1
Метки нет (Все метки)

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

Реализация std::list, сложность list::size()
Часто приходилось пользоваться Listом, но сейчас столкнулся с небольшой...

Потокобезопасность std::map::end, std::list::end
Собсна сабж, могу ли я без синхронизаций выполнять подобного рода код if...

Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int')
Есть такие строки: std::list&lt;c_bullet*&gt; Bullets; ... for(auto i =...

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

Static std::list
Добрый день, помогите решить проблему. &quot;Каждое статическое поле должно быть...

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

Сортировка std::list
Есть такой фрагмент програми. Создаю функцию для сортировки list. Вроде все...

Передача std::list<> в функцию
Нужно передать список строк в функцию. У меня сделано так: void...

Непосредственное удаление из std::list
Собственно проблема вот в чем раньше, когда я создавал игру, у меня были...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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