Форум программистов, компьютерный форум CyberForum.ru

Необходимо удалить элемент списка - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Моя контрольная на C,не получается http://www.cyberforum.ru/cpp-beginners/thread218643.html
Мне дали задачу,но не могу её решить,так как не знаю как.нуждаюсь в вашей помощи. Даны натуральное число n,действительные числа а1,...,an.В последовательности a1,...,an определить число соседств двух положительных чисел.
C++ Наследование конструкторов Создать класс CPoint – точка. На его основе создать классы CColoredPoint и CLine. На основе класса СLine создать класс CcoloredLine и класс CPolyLine – многоугольник. Все классы должны иметь методы для установки и получения значений всех координат, а также изменения цвета и получения текущего цвета. Продемонстрировать работу классов. http://www.cyberforum.ru/cpp-beginners/thread218632.html
C++ Массивы, индексы
Добрый день, пишу задание по работе с массивами.... не выходт реализовать. Есть два массива. Нужно найти одинаковые элементы массива и вывести индексы этих элементов из первого массива. Помогите написать отдельно функцию, которая будет возвращать индексы, и майн ..... (функцию пытаюсь припаять к dll библиотеке)
C++ В матрице увеличить элементы каждой строки на вычисленное в ней среднее арифметическое
Доброго времени суток. Помогите пожалуйста решить задачи: 1.В матрице увеличить элементы каждой строки на вычисленное в ней среднее арифметическое, если первый элемент матрицы больше последнего. В противном случае матрица остаётся без изменений. 2.Даны три массива. Заменить в каждом элементе с чётными индексами на значение последнего элемента в массиве. Вывести эти массивы на печать. За 1...
C++ функции http://www.cyberforum.ru/cpp-beginners/thread218593.html
Составить программу, определяющую ,в каком из данных двух чисел больше цифр. подпрограмма должна выполнять подсчет количества цифр в одном числе. (Borland C++)
C++ файлы в С++ помогите пожалуйста решить задачку на файлы,а то именно на этой теме я не была на паре!и именно она мне попалась в контрольной... вот задачка:Дан файл содержащий зашифрованный русский текст.Каждая буква заменяется на следующую за ней(буква я заменяется на а).Получить в новом файле расшифровку данного текста. подробнее

Показать сообщение отдельно
EvgeniyV
0 / 0 / 0
Регистрация: 23.12.2010
Сообщений: 4
23.12.2010, 12:16     Необходимо удалить элемент списка
Привет!!! Пишу курсовую работу, используя библиотеку STL. Конкретно работаю с классом list. Сейчас мне необходимо удалить элемент списка, для этого использую функцию erase(), принцип ее работы мне ясен, но я использую не стандартные типы, а элементом списка является созданный мною класс, подскажите пожалуйста, что мне нужно перегрузить или что делаю неправильно.
Вот код:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
// kursovik.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <fstream> 
#include <list>
#include <conio.h>
#include <string>
 
using namespace std;
char* strcpy( char* s1, char* s2)
    {
        int i=0;
        s1[1]=0;
        while(!s2[i]==0)
            {
                s1[i]=s2[i];
                i++;
            }
        s1[i++]=0;
        return s1;
    }
class Info
{   public:
        char floor[2];                      //пол 
        int age;                            //возраст
        char formation[20];                 //образование 
        int general_experience;             //общий стаж
        int work_experience_in_last_post;   //стаж работы в последней занимаемой должности
 
        Info(char _floor[2]="-", int _age=18,char _formation[20]="-", int _general_experience=0, int _work_experience_in_last_post=0)
            {
                strcpy(floor, _floor);                      
                age=_age;                           
                strcpy(formation, _formation);               
                general_experience=_general_experience;             
                work_experience_in_last_post=_work_experience_in_last_post; 
            }
};
 
class Unemployed: public Info
{
        char surname[20];                       //фамилия
        char trade[20];                         //профессия 
        char post[20];                          //должность 
        int date_account[3];                    //дата постановки на учет
        int desirable_salary;                   //желаемая зарплата 
        char desirable_post[20];                //желаемая должность
    public:
        Unemployed(char _surname[20]="-", char _trade[20]="-", char _post[20]="-", int _date_account[3]=(0,0,0), int _desirable_salary=0,   char _desirable_post[20]="-",char _floor[2]="-", int _age=18,char _formation[20]="-", int _general_experience=0, int _work_experience_in_last_post=0)
                :Info(_floor, _age,_formation,  _general_experience,  _work_experience_in_last_post)
            {
                strcpy(surname, _surname); 
                strcpy(trade,_trade);
                strcpy(post, _post); 
                for(int i=0;i<3;i++)
                    date_account[i]=_date_account[i]; 
                desirable_salary=_desirable_salary; 
                strcpy(desirable_post,_desirable_post);
            }
 
};  
class Vacancy: public Info
{public:
        char firm[20];                      //название фирмы
        char vacant_post[20];               //вакантная должность 
        int salary;                         //заработная плата
    
        Vacancy(char _firm[20]="-", char _vacant_post[20]="-", int _salary=0,char _floor[2]="-", int _age=18,char _formation[20]="-", int _general_experience=0, int _work_experience_in_last_post=0)
                :Info(_floor, _age,_formation,  _general_experience,  _work_experience_in_last_post)
            {
                strcpy(firm,_firm);
                strcpy(vacant_post, _vacant_post);
                salary=_salary;
            }
        Vacancy show();
        int get();
        friend istream & operator>>(istream &, Vacancy &);
        friend ostream &operator << ( ostream & , Vacancy& );
        bool operator<(Vacancy &);
        bool operator>(Vacancy &);
        bool operator==(Vacancy &);
        bool operator!=(Vacancy &);
        friend ifstream & operator>>(ifstream & , Vacancy &);
        Vacancy operator = (Vacancy);
};
//Функции класса Vacancy 
int Vacancy::get()
    {
        cin>>firm;
        return 1;
    }
Vacancy Vacancy::show()
    {
        //cout<<firm<<" "<<vacant_post<<" "<<salary<<" "<<floor<<" "<<age<<""<<formation<<" "<<general_experience<<" "<<work_experience_in_last_post<<endl;
        return *this;
    }
 
//Перегрузка операторов класса Vacancy
istream & operator>>(istream & s, Vacancy &V)
    {   
        cout<<"Vvedite firmu\n";
        s>>V.firm;
        cout<<"Vvedite vaccantnuy dolznost\n";
        s>>V.vacant_post;
        cout<<"Vvedite zarplatu\n";
        s>>V.salary;
        cout<<"Vvedite pol\n";
        s>>V.floor;
        cout<<"Vvedite vozrast\n";
        s>>V.age;
        cout<<"Vvedite obrazovanie\n";
        s>>V.formation;
        cout<<"Vvedite staz raboti\n";
        s>>V.general_experience;
        cout<<"Vvedite staz na posledney rabote\n";
        s>>V.work_experience_in_last_post;
        return s;
    }
ifstream & operator>>(ifstream & s, Vacancy &V)
    {   
        s>>V.firm;
        s>>V.vacant_post;
        s>>V.salary;
        s>>V.floor;
        s>>V.age;
        s>>V.formation;
        s>>V.general_experience;
        s>>V.work_experience_in_last_post;
        return s;
    }
ostream &operator << ( ostream &s , Vacancy &V )
    {
        s<<V.firm<<" "<<V.vacant_post<<" "<<V.salary<<" "<<V.floor<<" "<<V.age<<" "<<V.formation<<" "<<V.general_experience<<" "<<V.work_experience_in_last_post;
        return s;
    }
/*bool Vacancy::operator<(Vacancy &ob)
    {
        return firm < ob.firm;
    }
bool Vacancy::operator>(Vacancy &ob)
    {
        return firm > ob.firm;
    }
bool Vacancy::operator==(Vacancy &ob)
    {
        return firm == ob.firm;
    }
bool Vacancy::operator!=(Vacancy &ob)
    {
        return firm != ob.firm;
    }*/
Vacancy Vacancy::operator = (Vacancy V)
    {
        strcpy(firm,V.firm);
        strcpy(vacant_post,V.vacant_post);
        salary=V.salary;
        strcpy(floor,V.floor);
        age=V.age;
        strcpy(formation,V.formation);
        general_experience=V.general_experience;
        work_experience_in_last_post=V.work_experience_in_last_post;
        return *this;
    }
 
int MENU()
{
    cout<<"\tMENU:\n";
    cout<<"1-dly dobavleniy\n2-dly prosmotra\n3-dly poiska\n4-dly udaleyiy\n5-sohraneniy\n6-zagruzki\n";
    cout<<"Vibereri punkt menu\n";
    return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
    Vacancy Vac;
    int k=1;
    list <Vacancy> lst1;    
    list<Vacancy>::iterator p;
    ofstream file_object("Vacancy.txt",ios::app); //сохранение в файл
    ifstream input_file("Vacancy.txt",ios::app) ; 
    while(k!=0)
        {
            MENU();
            cin>>k;
            switch(k)
                {
                    case 1:
                        cin>>Vac;
                        lst1.push_back(Vac);
                        _getch();
                        break;
                    case 2:
                        p = lst1.begin();
                        while(p!=lst1.end())
                            {
                                cout<<*p<<endl;
                                p++;
                            }
                        _getch();
                        break;
                    case 3:
                        p = lst1.begin();
                        char poisk[20];
                        cout<<"Vvedite firmu kotoruyu nado nayti"<<endl;
                        cin>>poisk;
                        while(p!=lst1.end())
                            {
                                if (strcmp(p->firm,poisk)==0)
                                    {
                                        cout<<*p;
                                        lst1.erase(p);
                                    }
                                p++;
                            }
                        _getch();
                        break;
                    case 4:
                        lst1.clear();
                        _getch();
                        break;
                    case 5:
                        p = lst1.begin();
                        while(p!=lst1.end())
                            {
                                file_object<<*p;
                                p++;
                            }
 
                        _getch();
                        break;
                    case 6:
                        while (! input_file.eof()) 
                            {
                                input_file>>Vac;
                                lst1.push_back(Vac);
                            }
                        _getch();
                        break;
                    case 0:
                        exit(0);
                        _getch();
                        break;
                }
        }
    file_object.close();
    input_file.close();
    _getch();
    return 0;
}
Я привел весь код, в котором возможно есть еще много чего, что нормальные программисты не делают, но все так меня больше всего интересует только вот эта часть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    p = lst1.begin();
    char poisk[20];
    cout<<"Vvedite firmu kotoruyu nado nayti"<<endl;
    cin>>poisk;
    while(p!=lst1.end())
        {
            if (strcmp(p->firm,poisk)==0)
                {
                    cout<<*p;
                    lst1.erase(p);
                }
                 p++;
        }
Спасибо за помощь.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru