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


Автор: Vampir41k 26.5.2011, 11:45
Код

#include <iostream>
#include <list>
using namespace std;

class User
{
    string name;

public:
    Ticket(string name0) {
        name = name0;
    }
    void show(void) const {
        cout << "Name:        " << name << endl;
  }
};

int main()
{
    list<User*> lst;
    string  name;

    lst.push_back(new User( name));
    
}



помогите как удалить элемент по признаку , например по имени

Автор: boostcoder 26.5.2011, 11:49
элемент сначала нужно найти. потом итератор передаешь в list::erase()

Автор: azesmcar 26.5.2011, 12:09
Код

#include <iostream>
#include <algorithm>
#include <string>
#include <list>

using namespace std;

class User
{
    // stream output operator
    friend std::ostream& operator << (std::ostream& out, const User& u)
    {
        return (out << u.name_);
    }
    // variables
    string name_;
public:
    struct finder: std::binary_function<User*, std::string, bool>
    {
        bool operator ()(const User* obj, const std::string& name) const
        {
            return obj->name_ == name;
        }
    };

    User(const string& n)
        :name_(n) {}
};

int main()
{
    list<User*> lst;
    string name;
    lst.push_back(new User("user1"));
    lst.push_back(new User("user2"));
    lst.push_back(new User("user3"));

    list<User*>::iterator it = std::find_if(lst.begin(), lst.end(), std::bind2nd(User::finder(), "user2"));
    if (it != lst.end())
    {
        delete *it;
        lst.erase(it);
    }

    for (it = lst.begin(); it != lst.end(); ++it)
    {
        std::cout << **it << std::endl;
    }
}

держи (заодно и подправил немного код). Не забудь в конце очистить объекты в списке.

Автор: Vampir41k 26.5.2011, 12:22
большое спасибо

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