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

c++ stl удаление елемента из list - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 53, средняя оценка - 4.62
koka3000
11 / 11 / 3
Регистрация: 02.02.2011
Сообщений: 211
01.06.2011, 18:06     c++ stl удаление елемента из list #1
C++
1
2
3
4
5
6
for(std::list<gun>::iterator iter = Gun.begin(); iter != Gun.end(); iter++)
{
    iter->controle();
    if(iter->getlife() == 0)          // На этом месте
        Gun.erase(iter++);      // выдаешь ошибку при выполнении
}
Во время работы приложения выдает ошибки. Подскажите, что не верно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 18:06     c++ stl удаление елемента из list
Посмотрите здесь:

удаление значения в STL list C++
C++ Удаление элемента списка list.STL
stl, удаление элементов в list C++
C++ STL list
List STL C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
01.06.2011, 18:15     c++ stl удаление елемента из list #2
C++
1
iter=Gun.erase(iter); break;
?
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
01.06.2011, 18:16     c++ stl удаление елемента из list #3
При удалении элемента списка все итераторы становятся НЕДЕЙСТВИТЕЛЬНЫМИ (типа не инициализированными). И кстати, при этом уменьшается размер списка - см. ограничение цикла...
koka3000
11 / 11 / 3
Регистрация: 02.02.2011
Сообщений: 211
01.06.2011, 18:19  [ТС]     c++ stl удаление елемента из list #4
Так все работает. Но мне нужно проверить другие объекты в классе...
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
01.06.2011, 18:22     c++ stl удаление елемента из list #5
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
При удалении элемента списка все итераторы становятся НЕДЕЙСТВИТЕЛЬНЫМИ (типа не инициализированными).
Как раз для списка это не верно. Все итераторы, ссылающиеся на не удалённые элементы остаются действительными
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
И кстати, при этом уменьшается размер списка - см. ограничение цикла...
Ну, ограничение там не по размеру же.
На самом деле код некорректный для случая, когда удаляется последний элемент списка. Итератор здесь увеличивается дважды: один раз при удалении, второй в конце итерации и при этом получается итератор, указывающий за end()
Вот так должно работать:
C++
1
2
3
4
5
6
7
8
for(std::list<gun>::iterator iter = Gun.begin(); iter != Gun.end(); )
{
    iter->controle();
    if(iter->getlife() == 0)
        Gun.erase(iter++);
    else
        iter++;
}
koka3000
11 / 11 / 3
Регистрация: 02.02.2011
Сообщений: 211
01.06.2011, 18:29  [ТС]     c++ stl удаление елемента из list #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
    std::list<gun>::iterator iter = Gun.begin();
    std::list<gun>::iterator end = Gun.end();
    while(iter != end)
    {
        iter->controle();
        if(iter->getlife() == 0)
        {
            Gun.erase(iter++);
            end = Gun.end();
        }
        else iter++;
    }
Спс все за помощь. Я вот уже сам написал. Вроде бы норм работает.
Yandex
Объявления
01.06.2011, 18:29     c++ stl удаление елемента из list
Ответ Создать тему
Опции темы

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