Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2011, 18:38   #1
Vasyl'eva
 
Регистрация: 04.12.2011
Сообщений: 3
Вопрос Ошибка работы программы. Работа с библиотекой STL и шаблонами. С ++

Здравствуйте.
написала программу, а она работает не совсем правильно, но понять мне трудно, т.к. с темой до конца не разобралась.
Код:
# 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");
}
Vasyl'eva вне форума Ответить с цитированием
Старый 25.12.2011, 18:39   #2
Vasyl'eva
 
Регистрация: 04.12.2011
Сообщений: 3
По умолчанию

Мне нужно было сделать так:
выбрать объекты одного из производных типов и добавить их в контейнер vector стандартного класса из STL.
//Преобразовать контейнер vector в контейнер list или map, указав границы копирования с помощью итераторов.
//Применить ко второму контейнеру один из стандартных методов сортировки библиотеки STL.
Я выбрала производный класс "Преподаватель", из списка, в котором находятся объекты всех моих классов, ищу преподавателей и добавляю в вектор. Потом с итераторами копирую в List, а вывод у меня получается такой: имя, фамилия, возраст и три непонятно откуда взявшихся числа.
Что я не так сделала?

Последний раз редактировалось Vasyl'eva; 26.12.2011 в 14:47.
Vasyl'eva вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пример работы в 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