向量数组vector的构造函数写法以及count函数的使用

 

定义一个有关人信息的类B

数据成员包括账号(整型)、姓名(字符串)、生日(类型A,试题A定义的类));

成员函数包括一组get函数、重载输入/输出运算符。

定义一操作类BOp

数据成员至少包括B类对象向量

成员函数包括:构造函数(从键盘输入一组B类对象并存入B类对象向量,账号输入-1时表示结束)、显示函数(按姓名升序输出向量的所有元素)、计数函数(参数为姓名,统计并返回姓名为指定姓名的对象的个数)

要求:定义操作类对象,依次调用显示函数和计数函数(作为cout的输出项,即输出满足条件的人数)。4 14

输入

一组B类对象数据;

要统计的指定对象的姓名

输出

按姓名升序输出B类对象(每行一个对象信息);

满足条件的对象数目。

样例输入

100 ff 8 20

110 cc 4 14

150 dd 4 30

-1

cc

样例输出

110 cc 4月14日

150 dd 4月30日

100 ff 8月20日

1

#include<bits/stdc++.h>
using namespace std;
class Date
{
    int month;
    int day;
public:
    Date(int month,int d);
    Date();
    int getMonth()
    {
        return month;
    }
    int getDay()
    {
        return day;
    }
    friend ostream&operator<<(ostream&os,const Date&d);
    friend istream&operator>>(istream&is,Date&d);
    void displayDate();
};
Date::Date(int m,int d)
{
    month=m;
    day=d;
}
Date::Date()
{
    month=day=0;
}
ostream&operator<<(ostream&os,const Date&d)
{
    os<<d.month<<"月"<<d.day<<"日"<<endl;
    return os;
}
istream&operator>>(istream&is,Date&d)
{
     while(1)
   {
       is>>d.month>>d.day;
       if(d.month==0&&d.day==0)
        return is;
       if(d.month==1||d.month==3||d.month==5||d.month==7||d.month==8||d.month==10||d.month==12)
        if(d.day>=1&&d.day<=31)
        return is;
       if(d.month==4||d.month==6||d.month==9||d.month==11)
        if(d.day>=1&&d.day<=30)
        return is;
       if(d.month==2)
        if(d.day>=1&&d.day<=28)
        return is;
   }
}
void Date::displayDate()
{
    cout<<month<<"月"<<day<<"日"<<endl;
}
class Student
{
    int id;
    string name;
    Date date;
public:
    Student(int i,string n,Date d):date(d)
    {
        id=i;
        name=n;
        date=d;
    }
    Student():date(0,0)
    {
        id=0;
        name="0";
    }
    int getId()
    {
        return id;
    }
    string getName()
    {
        return name;
    }
    Date getDate()
    {
        return date;
    }
    void displayStudent();
    friend ostream&operator<<(ostream&os,const Student&s);
    friend istream&operator>>(istream&is,Student&s);

};
void Student::displayStudent()
{
    cout<<id<<" "<<name<<" "<<date<<endl;
}
ostream&operator<<(ostream&os,const Student&s)
{
    os<<s.id<<" "<<s.name<<" "<<s.date<<endl;
    return os;
}
istream&operator>>(istream&is,Student&s)
{
    is>>s.id;
    if(s.id==-1)
        return is;
    is>>s.name>>s.date;
    return is;
}
bool cmp(Student a,Student b)
{
    return a.getName()<b.getName();
}
class Sop
{
    vector<Student>v1;
    vector<Student>::iterator it1;
    multimap<string,int>m1;
    multimap<string,int>::iterator mit1;
public:
    Sop()
    {
        int i=0;
        cout<<"请按照学号,姓名,生日输入学生信息:"<<endl;
        while(1)
        {
           Student s;
           cin>>s;
           v1.push_back(s);//将学生信息存入向量数组中
           if(v1[i].getId()==-1)
            break;
            i++;
        }
    }
    void display()
    {
        sort(v1.begin(),v1.end()-1,cmp);//按姓名升序排序
        for(int i=0;i<v1.size()-1;i++)
        {
            cout<<v1[i]<<endl;
        }
    }
    void count()
    {
        int k=0;
        cout<<"请输入要统计的学生的姓名"<<endl;
        string name;
        cin>>name;
        for(int i=0;i<v1.size()-1;i++)

            if(v1[i].getName()==name)
                k++;
            cout<<k<<endl;


    }

};
int main()
{
    //测试时间
    /*Date d;
    while(1)
    {
        cin>>d;
        if(d.getMonth()==0&&d.getDay()==0)
            break;
        cout<<d;
    }
*/


   //测试学生类
   /*Student s;
   while(1)
   {
       cin>>s;
       if(s.getId()==-1)
        break;
       cout<<s;
   }
   */
//测试操作类
    Sop s;
    s.display();
    s.count();




}

注意事项:

1,在第三个学生操作类中,题目说的是构造函数输入数据,所以要在构造函数中写入输入数据。因为这个类是用的vector向量数组,所以再输入数据的时候,要用到push_back将数据加到vector数组中。

2,vector向量的元素是从第0个开始的,所以在for循环中,要在最后一个元素的位置-1,

3,结束程序的语句要写在while循环里面,在主函数中,不需要输入数据,数据是由构造函数那里输入。

4 ,count计数,自己写的函数,不是原来stl标准库含有的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值