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

метод erase для list(STL) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Holsteng
 Аватар для Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
20.08.2012, 14:32     метод erase для list(STL) #1
Всем привет!

Не могу понять в чем у меня ошибка. Применяю метод erase в цикле для list, и с помощью него удаляю нужный элемент, но после удаления элемента вылетает ошибка, что невозможно инкремировать итератор.

C++
1
2
3
4
5
6
7
8
9
10
list < ListChannel > :: iterator iteratorchannel;
        for ( iteratorchannel = listchannel.begin(); iteratorchannel != listchannel.end(); ++iteratorchannel )
        {
            if ( iteratorchannel -> iNumberOfPaket == position )
            {
                listchannel.erase( iteratorchannel );
            
                
            }
        }
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2012, 14:32     метод erase для list(STL)
Посмотрите здесь:

list не работает erase C++
C++ STL List
C++ stl::list erase()
C++ STL list
List STL C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
20.08.2012, 14:37     метод erase для list(STL) #2
Итератор на удаленный элемент становится невалидным. Естественно, его уже нельзя инкрементировать.
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
20.08.2012, 14:39     метод erase для list(STL) #3
Holsteng, указатель становится неправильным, насколько я понял
Holsteng
 Аватар для Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
20.08.2012, 14:39  [ТС]     метод erase для list(STL) #4
Цитата Сообщение от CheshireCat Посмотреть сообщение
Итератор на удаленный элемент становится невалидным.
А что значит невалидным?
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
20.08.2012, 14:42     метод erase для list(STL) #5
после удаления, итератор указывает на ячейку в памяти не относящуюся к списку

c.erase(p) Удаляет элемент, указанный итератором p. Возвращает итератор после удаленного или после последнего элемента контейнера.
Holsteng
 Аватар для Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
20.08.2012, 14:44  [ТС]     метод erase для list(STL) #6
Я понял, элемент list содержит указатель на следующий элемент, поэтому он не может передвинуть. Всем спасибо!
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,560
Записей в блоге: 17
20.08.2012, 15:12     метод erase для list(STL) #7
А что значит невалидным?
Означает что он может указывать куда угодно....
PSIAlt
 Аватар для PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
20.08.2012, 15:15     метод erase для list(STL) #8
Для того что ты хочешь существует remove_if
http://www.cplusplus.com/reference/stl/list/remove_if/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2012, 15:25     метод erase для list(STL)
Еще ссылки по теме:

STL list C++
Работа с STL list + пропись List.h C++
C++ Использование list stl для вывода в файл

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

Или воспользуйтесь поиском по форуму:
Holsteng
 Аватар для Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
20.08.2012, 15:25  [ТС]     метод erase для list(STL) #9
Цитата Сообщение от PSIAlt Посмотреть сообщение
Для того что ты хочешь существует remove_if
Да, уже пробую
Yandex
Объявления
20.08.2012, 15:25     метод erase для list(STL)
Ответ Создать тему
Опции темы

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