![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 04.12.2011
Сообщений: 3
|
![]()
Здравствуйте.
написала программу, а она работает не совсем правильно, но понять мне трудно, т.к. с темой до конца не разобралась. Код: # include <iostream> # include <stdio.h> # include <vector> # include <list> # include <iterator> #include <algorithm> # include <iomanip> #include <Windows.h> using namespace std; class Base { protected: char * name; char * surname; int age; public: int tip; Base() { surname=new char [20]; name=new char [20]; age=0; } virtual void Print(){}; virtual void Input(){}; }; class Student: public Base { private: int coorse,group; int rate; public: Student() { coorse=0; group=0; rate=0; tip=1; } void Print() { cout<<name<<","<<surname<<","<<age< <","<<coorse<<","<<group<<","<<rate <<endl; //cout<<name<<","<<surname<<","<<age< <","<<coorse<<","<<group<<endl; } void Input() { cout<<"Введите имя студента "<<endl; cin>>name; cout<<"Введите фамилию студента "<<endl; cin>>surname; cout<<"Введите возраст студента "<<endl; cin>>age; cout<<"Введите курс студента"<<endl; cin>>coorse; cout<<"Введите группу студента"<<endl; cin>>group; cout<<"Введите рейтинг студента"<<endl; cin>>rate; } bool operator < (Student s ) { if (rate<s.rate) return true; else return false; } }; class Teacher: public Base { char*post; float salary; public: Teacher() { post=new char [20]; salary=0; tip=2; } void Print() { cout<<name<<","<<surname<<","<<age< <","<<post<<","<<salary<<endl; //cout<<name<<","<<surname<<","<<post <<endl; } void Input() { cout<<"Введите имя преподавателя: "<<endl; cin>>name; cout<<"Введите фамилию преподавателя: "<<endl; cin>>surname; cout<<"Введите возраст преподавателя: "<<endl; cin>>age; cout<<"Введите должность преподавателя: "<<endl; cin>>post; cout<<"Введите зарплату преподавателя:"<<endl; cin>>salary; } }; class Head: public Base { char*chair; public: Head() { chair = new char [20]; tip=3; } void Print() { cout<<name<<","<<surname<<","<<chai r<<","<<"возраст:"<<age<<endl; //cout<<name<<","<<surname<<","<<chai r<<endl; } void Input() { cout<<"Введите имя заведующего кафедрой "<<endl; cin>>name; cout<<"Введите фамилию заведующего кафедрой "<<endl; cin>>surname; cout<<"Введите кафедру заведующего "<<endl; cin>>chair; cout<<"Введите возраст заведующего кафедрой "<<endl; cin>>age; } }; vector <Student> vec; class Element { public: Base *d; Element*next; }; class Stack { public: Element*top; Stack() { top=NULL; } void Show() { Element * temp = top; while (temp) { temp->d->Print(); temp=temp->next; } } void Push(Base*b) { if (!top) { top=new Element(); top->d=b; top->d->Input(); top->next=NULL; return; } Element * temp=new Element(); temp->d=b; temp->d->Input(); temp->next=top; top=temp; } void add_in_vector(int t ) { Element* temp=top; while (temp!=NULL) { if (temp->d->tip==t) vec.push_back(*(Student*)temp->d); temp=temp->next; } } }; list <Student> lvec; list <Student>::iterator it; void main () { SetConsoleCP(1251); SetConsoleOutputCP(1251); Stack * S= new Stack (); int k=1; while (k!=0) { cout<<"Введите 1-студент,2-преподаватель,3-заведующий кафедрой,0-выход \n"; cin>>k; if (k==1)S->Push(new Student()); if (k==2)S->Push(new Teacher()); if (k==3)S->Push(new Head()); if (k==0)S->Show(); } S->add_in_vector(2); cout<<"\nнаш вектор\n"; for ( unsigned long int i=0;i<vec.size();++i) vec[i].Print(); lvec.assign(vec.begin(),vec.end()); cout<<setw(10)<<"\nполученный список"<<endl; for (it=lvec.begin();it!=lvec.end();++i t) it->Print(); lvec.sort(); cout<<setw(10)<<"\nотсортированный список"<<endl; for (it=lvec.begin();it!=lvec.end();++i t) it->Print(); system("pause"); } |
![]() |
![]() |
![]() |
#2 |
Регистрация: 04.12.2011
Сообщений: 3
|
![]()
Мне нужно было сделать так:
выбрать объекты одного из производных типов и добавить их в контейнер vector стандартного класса из STL. //Преобразовать контейнер vector в контейнер list или map, указав границы копирования с помощью итераторов. //Применить ко второму контейнеру один из стандартных методов сортировки библиотеки STL. Я выбрала производный класс "Преподаватель", из списка, в котором находятся объекты всех моих классов, ищу преподавателей и добавляю в вектор. Потом с итераторами копирую в List, а вывод у меня получается такой: имя, фамилия, возраст и три непонятно откуда взявшихся числа. Что я не так сделала? Последний раз редактировалось Vasyl'eva; 26.12.2011 в 14:47. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Пример работы в stl со строками | ArniLand | Общие вопросы C/C++ | 2 | 30.06.2011 08:49 |
работа с библиотекой tinyxml | zhenya.ya | Общие вопросы C/C++ | 0 | 19.04.2011 22:42 |
Ошибка(, STL, вектора | ZadiraUA | Общие вопросы C/C++ | 3 | 25.09.2010 17:27 |
Работа со стандартной библиотекой С. | Lag | Общие вопросы C/C++ | 0 | 30.05.2010 19:03 |
Работа с шаблонами | Viteef | PHP | 3 | 30.07.2007 03:39 |