Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> STL list, удаление элемента 
V
    Опции темы
Vampir41k
Дата 26.5.2011, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 15.3.2009

Репутация: нет
Всего: нет



Код

#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));
    
}



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


Это сообщение отредактировал(а) Vampir41k - 26.5.2011, 11:46
PM MAIL WWW ICQ   Вверх
boostcoder
Дата 26.5.2011, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



элемент сначала нужно найти. потом итератор передаешь в list::erase()
PM WWW   Вверх
azesmcar
Дата 26.5.2011, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Код

#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;
    }
}

держи (заодно и подправил немного код). Не забудь в конце очистить объекты в списке.
PM   Вверх
Vampir41k
Дата 26.5.2011, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 15.3.2009

Репутация: нет
Всего: нет



большое спасибо
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.