858 / 447 / 112
Регистрация: 06.07.2013
Сообщений: 1,494
1

Непосредственное удаление из std::list

04.04.2015, 22:57. Показов 540. Ответов 1
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
struct List
{
  T data;
  List* next;
  List* prev;
 
 void Remove();
}
был лист из монстров, а в самом монстре был указатель на себя в листе. когда монстр умирал он с легкостью удалял себя из листа без поиска по нему.
Когда я перешел на std::list возникла проблема, как же удалить себя из листа, не используя find , и любого другого поиска. Сначала хранил в монстре итератор в листе, который записывался при его создании, но оказалось что при удалении монстров итераторы других начинают смещаться и указывают на другие элементы листа.
Вопрос- к чему такому привязаться к листе при добавлении элемента, чтобы потом удалить его без лишних поисков?

Добавлено через 11 минут
хотя насчет итераторов может быть я не прав, может быть их все таки можно брать в надежде получить точную позицию в листе после удаления других элементов?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2015, 22:57
Ответы с готовыми решениями:

Удаление значения в std::list
Имеем метод для удаления, где value - предов. значение, а list<films> coll - копия др....

Std::list удаление элемента во время цикла
Добрый вечер, Как бы удалить элеммент без "сбора итераторов". #include <iostream> #include...

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

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

1
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
04.04.2015, 23:18 2
При удалении из std::list итераторы на неудаленные элементы сохраняют свою валидность (тыц).
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2015, 23:18
Помогаю со студенческими работами здесь

Разъясните код пжлст(выдает ошибку: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 = Bullets.begin(); i !=...

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru