crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> Удаление элементов из списка std::list в цикле
Алексей1153
  опции профиля:
сообщение 19.10.2012, 8:24
Сообщение #11


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


а ещё удобнее так :)

    td_my_list my_list;

    my_list.push_back(3);
    my_list.push_back(2);
    my_list.push_back(3);
    my_list.push_back(4);
    my_list.push_back(5);
    my_list.push_back(3);
    my_list.push_back(7);

    //удаление без предиката
    my_list.remove(3);


    //удаление с предикатом (ну это на случай более сложных сравнений. Сейчас это излишество)
    struct pred
    {
        td_my_list::value_type m_val;

        pred(td_my_list::value_type m_val):m_val(m_val)
        {
        }

        bool operator()(td_my_list::value_type& elem)const
        {
            return elem==m_val;
        }
    };

    my_list.remove_if(pred(3));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
D_K
  опции профиля:
сообщение 19.10.2012, 8:29
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 20.5.2009
Пользователь №: 761

Спасибо сказали: 3 раз(а)




Репутация:   1  


Насколько я понимаю, изначальный код упрощенный. И проблема как раз в сочетании обхода в обратном порядке и удаления элементов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.10.2012, 8:39
Сообщение #13


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


а зачем нужен именно обратный обход ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 19.10.2012, 8:43
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Алексей1153 @ 19.10.2012, 9:39) *
а зачем нужен именно обратный обход ?

Затем, что задача такая! :) А если серьезно, алгоритм такой, что в хвосте списка как раз лежат элементы для удаления. Приведенный тобой код не относится к задаче вообще, извини. Задача как раз про удаление элементов во время обхода списка. Конечно же, здесь указан упрощенный код, а так-то во время обхода могут делаться и другие операции со списком.

Сообщение отредактировал AD - 19.10.2012, 8:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.10.2012, 8:53
Сообщение #15


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


ну ладно ) извиняться не за что вроде ))

а что мешает изначально инверсно хранить элементы ? Что мешает применить vector ?

насчёт других операций - тоже аргумент непонятен.

Огласил бы задачу, что гадаем
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 19.10.2012, 8:57
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Алексей1153 @ 19.10.2012, 9:53) *
Огласил бы задачу, что гадаем

Задача оглашена в названии темы. Удаление элементов из списка в цикле! Операции добавления и удаления самые важные в данной задаче, потому и используется список. Где гадание? Не понимаю, зачем спорить, если проблема объяснена четко и ясно. Проблема выделена в упрощенный тестовый наглядный код. Какие дополнительные задачи решаются - неважно на данный момент.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.10.2012, 9:05
Сообщение #17


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


спокойнее ) Всё важно. Я же не для того, чтобы поспорить, а ради истины ))

Цитата
Какие дополнительные задачи решаются

от этого как раз надо плясать. Ну а когда чисто абстрактная задача - она решается ровно одной строкой (цикл там есть, загляни в исходники)

Цитата
Операции добавления и удаления самые важные в данной задаче, потому и используется список.

и это не аргумент для выбора списка. Ты не сказал КАК и ЧТО ты добавляешь и удаляешь.

Если всё остаётся на уровне школьной задачки, то считаем задачу решённой, ок.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 19.10.2012, 9:19
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Алексей1153 @ 19.10.2012, 10:05) *
спокойнее ) Всё важно. Я же не для того, чтобы поспорить, а ради истины ))

Ее в принципе не существует, потому и, получается, что спор ради спора. Любую задачу можно решить множеством способов. Понятное дело, что не всегда принимается оптимальный вариант, но есть куча побочных факторов, не относящихся прямо к задаче, которые влияют на выбор решения. В данном случае, приводится очевидный кусок кода слегка в упрощенном варианте. Цикл сделан не случайно, так как в реальной задаче сравнение на удаляемый элемент не такое простое, требующее знать отдельные части структуры, которая является элементом списка (конечно же, там не список простых чисел! :)). И даже в упрощенном варианте видна проблема, которую и решают.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
D_K
  опции профиля:
сообщение 19.10.2012, 11:02
Сообщение #19


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 20.5.2009
Пользователь №: 761

Спасибо сказали: 3 раз(а)




Репутация:   1  


Цитата(Алексей1153 @ 19.10.2012, 10:05) *
и это не аргумент для выбора списка. Ты не сказал КАК и ЧТО ты добавляешь и удаляешь.

А тема и не о выборе контейнера ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.10.2012, 12:01
Сообщение #20


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


ага, тема про цикл ))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 8:40