Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
2 / 2 / 4
Регистрация: 05.11.2016
Сообщений: 64

Std::list Удалить элемент если тип списка собственный класс

17.09.2017, 14:10. Показов 2666. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как удалить нужный элемент! И неплохо бы было узнать как обращаться к полям объекта в списке

C++
1
2
3
4
5
6
7
8
9
list <Abonent> l1,l2;
    Abonent obama213("Пупкин","Поток","Чудненко","330216","12345","12.12.2017","Оплачено",150,"11.11.2015");
    Abonent obama214("Васькин","Октябрьский","Чудненко","771144","54321","12.11.2015","Неоплачено",120,"10.10.2014");
    Abonent obama215("Боб","Поток","Малахова","290874","007","1.1.1998","Оплачено",12000,"15.15.1950");
void DeleteAbonent(string named)
{   
    for (std::list<Abonent>::iterator it = l1.begin(); it != l1.end();) {
    l1.remove();
}
Добавлено через 4 минуты
Мне нужно сделать методы поиска, удаления, добавления абонента(класс Abonent)
Класс Abonent
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Abonent
{
 
  public:
    string familia;
    string raion;
    string adres;
    string number_phone;
    string dogovor_numb;
    string data_dogovora;
    string oplata_ystanovki;
    int abonentskay_plata;
    string data_last_plateja;
 
    Abonent(): familia(""),raion(""),adres(""),number_phone(""),dogovor_numb(""),data_dogovora(""),oplata_ystanovki(""),abonentskay_plata(0),data_last_plateja("") {};
    Abonent(string _familia, string _raion,string _adres,string _number_phone,string _dogovor_numb,string _data_dogovora,string _oplata_ystanovki,int _abonentskay_plata,string _data_last_plateja):
         familia(_familia),raion(_raion),adres(_adres),number_phone(_number_phone),
         dogovor_numb(_dogovor_numb),data_dogovora(_data_dogovora),oplata_ystanovki(_oplata_ystanovki),abonentskay_plata(_abonentskay_plata),data_last_plateja(_data_last_plateja){};
 
    Abonent ( const  Abonent &e) :  familia(e.familia),raion(e.raion),adres(e.adres),number_phone(e.number_phone),dogovor_numb(e.dogovor_numb),
    data_dogovora(e.data_dogovora),oplata_ystanovki(e.oplata_ystanovki),abonentskay_plata(e.abonentskay_plata),data_last_plateja(e.data_last_plateja){};
     friend std::ostream& operator<<(std::ostream& out, const Abonent& e);
     friend std::istream& operator>>(std::istream& in, Abonent& e);
 
void show()
    {
        cout << "Фамилия - " << familia << endl << "Номер телефона -  " << number_phone << endl;
 
    }
 
};
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.09.2017, 14:10
Ответы с готовыми решениями:

Переместить элемент внутри списка std::list
Что-то я не пойму, простая вроде задача - переместить элемент внутри спиcка std::list - стандартной функции нету что-ли?

Как удалить первый элемент из std::list?
Скажите как удалить первый элемент из лист ругается вот как 181 C:\Documents and Settings\Loner\Рабочий стол\5.37\Bin.cpp 'class...

Создать класс Элемент списка (Node), а затем класс Список (List)
Задание: Создать класс Элемент списка (Node), а затем класс Список (List). В зависимости от варианта список должен быть одно или...

7
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
17.09.2017, 15:12
Mentalist_, не код класса Abonent нужно прикреплять, а код класса list.

Вставка в конец
Выделяете память под указатель на структуру представляющей ячейку list(обычно это Node).
Присваиваете нужный элемент (NewNode->elem = my_elem;)
next делаем 'нулевым указателем' (NewNode->next = 0;)
Соединяете указатель с хвостом (this->Tail->next = NewNode->prev;)
Перебрасываете хвост на новый элемент (this->Tail = this->Tail->next;)

Удаление
Если есть что удалять...
Ставим указатель на нужную ячейку которую хотим удалить.
Связываем крайние элементы.
По указателю который устанавливали на ячейку - освобождаем память.

Для поиска можно использовать итераторы и алгоритмы find_if / find и др..
0
 Аватар для MisterR
69 / 68 / 52
Регистрация: 28.10.2015
Сообщений: 388
17.09.2017, 15:30
Лучший ответ Сообщение было отмечено Mentalist_ как решение

Решение

Цитата Сообщение от Mentalist_ Посмотреть сообщение
Подскажите как удалить нужный элемент! И неплохо бы было узнать как обращаться к полям объекта в списке
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <algorithm>
#include <list>
#include <functional>
using namespace std;
 
struct B;
 
 
class A
{
    friend struct B;
    string name;
public:
    A(string name) :name(name)
    {}
 
    bool operator==(const A&obj)
    {
        return obj.name==this->name;
    }
 
 
};
struct B : public binary_function< A, string, bool > {
    bool operator () (const A &obj, const string &name) const {
        return obj.name == name;
    }
};
 
 
int main()
{
    list<A>lt;
    lt.emplace_back("John");
    lt.emplace_back("Tod");
    lt.emplace_back("Rob");
    lt.emplace_back("Bob");
    string delName = "Tod";
    auto it=find_if(lt.begin(), lt.end(), bind2nd(B(),delName));
    lt.remove(*it);
 
    system("pause");
    return 0;
}
0
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
17.09.2017, 15:36
так конечно можно предикат задавать, но это же моветон. тем более у вас емплейсы, т.е. плюсы новые. раз так - используйте лямбды.
0
 Аватар для MisterR
69 / 68 / 52
Регистрация: 28.10.2015
Сообщений: 388
17.09.2017, 15:41
Цитата Сообщение от DU3 Посмотреть сообщение
так конечно можно предикат задавать, но это же моветон. тем более у вас емплейсы, т.е. плюсы новые. раз так - используйте лямбды.
просто способ показал, а так лучше будет
C++
1
2
3
4
5
6
7
8
9
10
11
class A
{
public:
...
string getName()const
    {
        return name;
    }
};
...
auto it = find_if(lt.begin(), lt.end(), [delName](const A&obj)->bool {return obj.getName() == delName;});
0
2 / 2 / 4
Регистрация: 05.11.2016
Сообщений: 64
18.09.2017, 13:35  [ТС]
Класса list нету просто пользуюсь std::list

Добавлено через 9 часов 33 минуты
C++
1
2
3
4
5
6
7
8
void DeleteAbonent(string named)
{   std::list<Abonent>::iterator it=find_if(l1.begin(), l1.end(), bind2nd(B(),named));
    l1.remove(*it);
    std::list<Abonent>::iterator iter=find_if(l2.begin(), l2.end(), bind2nd(B(),named));
    l2.remove(*iter);
 
 
            }
Не подскажите как проверить есть ли действительно в 1 списке то что я хочу удалить
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
18.09.2017, 13:45
Цитата Сообщение от Mentalist_ Посмотреть сообщение
есть ли действительно в 1 списке то что я хочу удалить
Сравнить полученный итератор с l1.end().

Добавлено через 6 минут
И лучше вообще сделать так:
C++
1
2
3
4
5
std::list<Abonent>::iterator it=find_if(l1.begin(), l1.end(), bind2nd(B(),named));
if(it != l1.end())
{
    l1.erase(it);
}
Чтобы не тратить время на повторный поиск объекта в remove.
0
2 / 2 / 4
Регистрация: 05.11.2016
Сообщений: 64
18.09.2017, 16:29  [ТС]
Скажем, а если надо посчитать абонентскую плату, как то можно работать с этим полем?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.09.2017, 16:29
Помогаю со студенческими работами здесь

Что происходит с List если удалить первый элемент?
собственно и сам вопрос что происходит с List если удалить первый в списке элемент?

Удалить 2-й элемент списка,если он нечетный,иначе этот элемент обнулить
удалить 2-й элемент списка,если он нечетный,иначе этот элемент обнулить

Односвязный список: удалить элемент списка, если он чётный и следующий элемент отрицательный и нечётный
Здравствуйте. Задание на односвязные списки: удалить элемент списка, если он чётный и следующий элемент отрицательный и нечётный(реализация...

Определить предикат Р(List,Х) который истинен если Х состоит из пар элементов списка List,сумма которых больше половины элементов List
Помогите пожалуйста написать программу,буду очень благодарен,заранее спасибо! Определить предикат Р(List,Х) который истинен если Х...

Удалить из списка L второй элемент, если такой есть
Описать процедуру, которая удаляет из списка L второй элемент, если такой есть. Использовать однонаправленные списки без заглавного звена...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru