C++提高编程 3 STL常用容器 -案例 评委打分

#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<algorithm>        //标准算法头文件
#include<ctime>

using namespace std;

//选手类
class Person
{
public:
    Person(string name, int score)
    {
        this->m_Name = name;
        this->m_Score = score;
    }
    string m_Name;
    int m_Score;
};

void creatPerson(vector<Person>& v)
{
    string nameSeed = "ABCDE";        
    for (int i = 0; i < 5; i++)        //打印出来就是 选手A 选手B 选手C 选手D 选手E
    {
        string name = "选手";        //先把共同的字符提出来
        name += nameSeed[i];        //再把不同的字符拼接起来

        int score = 0;
        Person p(name, score);

        //将创建的person对象 放入到容器中
        v.push_back(p);
    }
}

//打分
void setScore(vector<Person>& v)
{
    for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
    {
        //将评委的分数 放入到deque容器中
        deque<int>d;
        for (int i = 0; i < 10; i++)
        {
            int score = rand() % 41 + 60;    //60~100
            d.push_back(score);
        }

        //cout << "选手:" << it->m_Name << "打分为:" << endl;
        //for (deque<int>::iterator dit = d.begin(); dit != d.end(); dit++)
        //{
        //    cout << *dit << " ";
        //}
        //cout << endl;

        //排序
        sort(d.begin(), d.end());

        //去除最高和最低分
        d.pop_back();
        d.pop_front();

        //取平均分
        int sum = 0;
        for (deque<int>::iterator dit = d.begin(); dit != d.end(); dit++)
        {
            sum += *dit;    //累加每个评委的分数
        }

        int avg = sum / d.size();

        //将平均分 赋值给选手身上
        it->m_Score = avg;        
    }
}

void showScore(vector<Person>& v)
{
    for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << "姓名:" << it->m_Name << "  平均分:" << it->m_Score << endl;
    }
}

int main()
{
    //随机数种子
    srand((unsigned int)time(NULL));
    
    //1、创建5名选手
    vector<Person>v;
    creatPerson(v);

    //测试
    /*for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << "姓名:" << (*it).m_Name << "    分数:" << (*it).m_Score << endl;
    }*/            //可以打印出     姓名:选手A    分数:0  ......
     
    //2、给5名选手打分
    setScore(v);

    //3、显示最后得分
    showScore(v);

    system("pause");
    return 0;
}

 

posted @ 2022-02-24 17:05  大白不会敲代码  阅读(37)  评论(0)    收藏  举报