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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 53, средняя оценка - 4.62
koka3000
11 / 11 / 3
Регистрация: 02.02.2011
Сообщений: 211
#1

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

01.06.2011, 18:06. Просмотров 6918. Ответов 5
Метки нет (Все метки)

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
Посмотрите здесь:

C++ Удаление елемента из char массива.
удаление значения в STL list C++
C++ Удаление элемента списка list.STL
C++ STL List
stl, удаление элементов в list C++
C++ STL list
List STL C++
C++ Удаление елемента списка с использованием итератора. STL
STL list C++
C++ Удаление list STL
Работа с STL list + пропись List.h C++
C++ Реализация list из STL

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
01.06.2011, 18:15     c++ stl удаление елемента из list #2
C++
1
iter=Gun.erase(iter); break;
?
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,658
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
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
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
Ответ Создать тему
Опции темы

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