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

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

Войти
Регистрация
Восстановить пароль
 
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
#1

Удаление нескольких элементов в list - C++

10.09.2013, 22:23. Просмотров 459. Ответов 4
Метки нет (Все метки)

Собственно, нарушается ли порядок итераторов при удалении? Т.е. могу ли я в цикле по всему list'у, если элемент не удовлетворяет условию, сразу же его удалять? Остальные итераторы не обрушатся? Типа такого:
C++
1
2
3
4
5
6
7
for(auto it = a.begin(); it!=a.end(); ++it) {
   if (PRED(*it)) {
      auto temp = it;
      ++it;
      a.erase(temp);
   }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2013, 22:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление нескольких элементов в list (C++):

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

Удаление нескольких элементов из односвязного списка - C++
Всем привет! Собственно, сабж: есть односвязный список с повторяющимися элементами. Мне надо удалить определенные элементы. Есть...

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

Удаление vector, list, string - C++
Привет! Такая задача. В программе я описал класс Class1. Класс содержит поля стандартных типов, а также поле std::string и...

c++ stl удаление елемента из list - C++
for(std::list<gun>::iterator iter = Gun.begin(); iter != Gun.end(); iter++) { iter->controle(); if(iter->getlife() == 0) ...

Непосредственное удаление из std::list - C++
Собственно проблема вот в чем раньше, когда я создавал игру, у меня были самодельные листы типа struct List { T data; ...

4
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
10.09.2013, 22:29 #2
monolit, ничего не нарушается:
http://en.cppreference.com/w/cpp/container/list/erase
Other references and iterators are not affected.
Вообще есть метод remove_if.

Добавлено через 1 минуту
monolit, + у вас тут будет двойной инкремент, если тело if выполнится.
1
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
11.09.2013, 00:05  [ТС] #3
Да, вы правы, инкремент не в ту сторону и должен быть перед удалением...
А для remove_if нужно писать функ.объект, а мне неохота код лишними классами загромождать)
Спасибо.
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
11.09.2013, 00:10 #4
monolit, а PRED что такое, функция? Указатель на ф-ю тоже можно передать в remove_if.

Добавлено через 2 минуты
+ есть лямбды
0
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
11.09.2013, 12:55  [ТС] #5
лямбды именно в remove_if не подойдут, там параметр один разный(у меня, в условии), приходится функ. объект использовать...
А PRED это какое-то условие - так, для примера.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2013, 12:55
Привет! Вот еще темы с ответами:

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

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

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

Удаление из вектора нескольких объектов - C++
Собственно как удалить несколько объектов из вектора, имея индексы/итераторы, ведь при удалении первого объекта придется пройтись по всем...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
11.09.2013, 12:55
Ответ Создать тему
Опции темы

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