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

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

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

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

01.06.2011, 18:06. Просмотров 7163. Ответов 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
Посмотрите здесь:

Удаление елемента списка с использованием итератора. STL - C++
Надо удалить из списка елементы, значение которых входит в некий диапазон. Я хочу использовать для етого итератор(если такое вообще...

Удаление list STL - C++
Из списка, содержащего 100 тыс. элементов, удалить все элементы путем многократного удаления элемента из случайной позиции. Случайная...

Удаление значения в std::list - C++
Имеем метод для удаления, где value - предов. значение, а list&lt;films&gt; coll - копия др. списка(который уже наполнен данными). ...

stl, удаление элементов в list - C++
Всем доброго времени суток! прошу помочь в решении задачи: Из числовой последовательности найти удалить все элементы, лежащие в...

Удаление элемента списка list.STL - C++
Всем привет! Ребята, не могу понять почему у меня не получается удалить конкретный элемент списка. Вот код void WriteClientinFile(...

Работа с STL list + пропись List.h - C++
Здравствуйте! Помогите, пожалуйста, разобраться с STL list. Нужно сделать программу в которой будет содержаться класс Student, прописать...

STL List - C++
Вот в чем проблема, была дана задача, решить которую надо было с помощью Deque и List, Deque надобыло оформить через STL, а List написать...

STL list - C++
как вставить элемент в середину списка list STL? float list_insert_rand(int num) { srand (time(NULL)); int rand_num, rand_pos; ...

STL list - C++
Доброго времени суток, пока имею поверхностное представление о алгоритмах STL и функциях для контейнеров, но есть задача: требуется...

List STL - C++
В общем нужно создать класс STL c помощью list: CStudent.h #include &lt;string&gt; using namespace std; enum number_type{G1, G2,...

Удаление елемента из char массива. - C++
Здрасте. Есть база данных. я хочу сделать чтоб елементы базы можно было удалять. каждый ел базы эт ячейка масива char, как char присвоить...

stl::list erase() - C++
вот такой код есть, но не работает. как подправить? list&lt;int&gt; ls; list&lt;int&gt;::iterator it; for(int i=0; i&lt;5; i++) { ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
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
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
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
Ответ Создать тему
Опции темы

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