Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > удаление из списка


Автор: zhenya1 27.5.2011, 01:22
Дано: информационная система кинотеатра.

Есть метод удаления, в котором value - введенная ,скажем, из  main строка , а list<films> coll  - список, содержащий имя фильма и др. поля. Проверяю: если введенная строка и имеющаяся в списке совподают - хочу удалить такую из списка.

Проблема: как возможно ее удалить?

Код

void films::delete_value(string value, list<films> coll)
{
list<films>::iterator iter;
for(iter=coll.begin();iter!=coll.end();++iter)
    {
        if(value==(*iter).film_name)
        {
            coll.remove(     ); /// ???
        }

}
system("pause");
}

Автор: boostcoder 27.5.2011, 02:09
Код

void films::delete_value(string value, list<films> coll)
{
list<films>::iterator iter;
for(iter=coll.begin();iter!=coll.end();++iter)
    {
        if(value==(*iter).film_name)
        {
            coll.erase(iter);
        }
}
system("pause");
}


или посмотрите: http://cplusplus.com/reference/stl/list/remove_if/

Автор: borisbn 27.5.2011, 09:07
zhenya1, вот только не очень понятен смысл ф-ции
Код
void films::delete_value(string value, list<films> coll)

если она член класса, то зачем ей передаётся какой-то coll ?
почему в классе films есть ф-ция удаления из списка films'ов ?
и потом, coll передаётся не по ссылке, а по значению, т.е. копия. После удаления из него (из копии) данные из списка, который был передан ф-ции в качестве параметра, удалены не будут...

Автор: zhenya1 27.5.2011, 16:37
Цитата

если она член класса, то зачем ей передаётся какой-то coll ?


У меня в программе как можно больше от С++ должно быть. Это для демонстрации копирования.

Цитата

почему в классе films есть ф-ция удаления из списка films'ов ?

Хм... а куда рациональнее было бы реализовать?

Автор: borisbn 27.5.2011, 17:00
Цитата(zhenya1 @  27.5.2011,  16:37 Найти цитируемый пост)
а куда рациональнее было бы реализовать?

ну... я задачи то не знаю... но, насколько я понял, films (кстати, почему во множественном числе???) описывает один фильм, а list<films> - список этих фильмов.
в общем, выкладывай код, только не весь проект, а проблемную часть... посмотрим... посоветуем 

Автор: zhenya1 27.5.2011, 17:50
Я тут поразмыслил и понял ,что все дело в этом:
Цитата

и потом, coll передаётся не по ссылке, а по значению, т.е. копия. После удаления из него (из копии) данные из списка, который был передан ф-ции в качестве параметра, удалены не будут...


Как бы сделать так, чтобы в метод пошла истинная коллекция ?

На данный момент расположение  такое:
Код

class films
{
public:
    string film_name;     //намеренно в public
private:
  //....
public:
    films(string film_name2, //....и т.д.)
    {
        film_name = film_name2;
        //..... и т.д.
                }
    //....
    void delete_value(string value, list<films> coll);
    
};

...
main()
{
...
list<films> obj(n,films(f_name,...);
...
case 'A':
cout<<: input value:"<<endl;
ob.delete_value(value,obj);

...


 

Автор: borisbn 27.5.2011, 22:42
void delete_value(string value, list<films> & coll);

И всё равно не понимаю, зачем в классе "один фильм" ф-ция удаления из некого списка фильмов какого-то одного фильма по имени, при чём не имеющего отношения к этому классу/экземпляру???

Автор: zhenya1 27.5.2011, 23:08
а вообще, да, Вы наверно правы. Как-то нелогично получается...надо будет подумать
Огромное вам спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)