С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
spyphy
1 / 1 / 0
Регистрация: 03.11.2012
Сообщений: 40
#1

stl::list erase() - C++

26.03.2013, 13:11. Просмотров 1851. Ответов 2
Метки нет (Все метки)

вот такой код есть, но не работает. как подправить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    list<int> ls;
    list<int>::iterator it;
    for(int i=0; i<5; i++) 
    {
        ls.push_back(i);    
    }
 
    for(it = ls.begin(); it != ls.end(); it++) 
    {
        std::cout << *it << std::endl;  
        if (*it == 3) {
            ls.erase(it);   
        }
    }
есть простое решение как в цикле удалить нужные (ненужные) элементы списка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2013, 13:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос stl::list erase() (C++):

метод erase для list(STL) - C++
Всем привет! Не могу понять в чем у меня ошибка. Применяю метод erase в цикле для list, и с помощью него удаляю нужный элемент, но...

list не работает erase - C++
void in_out_Park(list&lt;Bus&gt; &amp;in, list&lt;Bus&gt; &amp;out) { int n, i=0; Bus temp; cout&lt;&lt;&quot;Введите номер автобуса: &quot;; cin&gt;&gt;n; ...

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

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

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

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

2
vxg
Модератор
3188 / 1991 / 228
Регистрация: 13.01.2012
Сообщений: 7,712
26.03.2013, 13:23 #2
никогда не вызывайте функции меняющие список во время перебора.
удалить элементы можно так
C++
1
ls.remove(1); //удалим все единицы
если элементы списка не так просты, то придется перебирать
C++
1
2
3
4
5
6
for (std::list<int>::iterator i = ls.begin(); i != ls.end(); i++)
    if (*i == 3)
    {
        ls.erase(i);
        break; //мы удалили тройку - прерываем перебор иначе мы можем попасть на исключение доступа
    }
а вот так можно перебирать если нужно удалять несколько элементов
C++
1
2
3
4
5
    for (std::list<int>::iterator i = ls.begin(); i != ls.end();)
    {
        if (*i == 3) i = ls.erase(i);
        else i++;
    }
следует иметь ввиду что если ваши элементы зависят друг от друга и вызов деструктора элемента может повлечь за собой доступ к другим элементам удалить элемент будет не так просто
1
spyphy
1 / 1 / 0
Регистрация: 03.11.2012
Сообщений: 40
26.03.2013, 15:03  [ТС] #3
Цитата Сообщение от vxg Посмотреть сообщение
никогда не вызывайте функции меняющие список во время перебора.
ага, это я уже заметил.

Цитата Сообщение от vxg Посмотреть сообщение

C++
1
2
3
4
5
    for (std::list<int>::iterator i = ls.begin(); i != ls.end();)
    {
        if (*i == 3) i = ls.erase(i);
        else i++;
    }
Да, вроде сойдет такое. Спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2013, 15:03
Привет! Вот еще темы с ответами:

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

Работа с STL list - C++
Есть некий каталог с 3 переменными (string,string,int), который нужно хранить в list Как я понимаю есть 2 решения хранения. 1....

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

STL List Iterator - C++
Как в STL list из итератора получить номер элемента, на который он указывает? Вот пример с вектором: cliext::vector&lt;int&gt;::iterator it; ...


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

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

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