黑马程序员C++提高4——deque容器

在这里插入图片描述

#include<string>
#include<vector>		//向量容器vector
#include<algorithm>		//算法的头文件
#include<cstdlib>		//随机数rand
#include<ctime>			//时间种子
#include<deque>			//双头数组
#include<iostream>
using namespace std;

//打印函数
void PrintDeque(deque<int> d) {
    
    
	for (deque<int>::iterator it = d.begin(); it != d.end(); it++) {
    
    
		cout << *it << " ";
	}
}

//初始化
void test01() {
    
    

	deque<int> d1;						//默认构造
	deque<int> d2(10, 5);				//容器里面初始化10个5
	deque<int> d3(d2.begin(), d2.end());//用d2的迭代器指定区间初始化d3
	deque<int> d4(d3);					//拷贝构造

	//打印
	PrintDeque(d4);
}

//赋值和大小操作
void test02() {
    
    

	//默认构造进行初始化
	deque<int> d1;
	deque<int> d2;
	deque<int> d3;

	//赋值
	d1.assign(10, 5);				//assign方法赋值10个5
	d2.assign(d1.begin(), d1.end());//迭代器指定区间赋值
	d3 = d2;						//重载=运算符赋值

	//打印
	PrintDeque(d3);

	//大小操作
	cout << "\nd3.size:" << d3.size() << endl;
	if (d3.empty()) {
    
    
		cout << "d3为空!" << endl;
	}
	else {
    
    
		cout << "d3不为空" << endl;
	}
	d3.resize(3);		//重置d3大小为3
	PrintDeque(d3);
	cout << "\n-------------------\n";
	d3.resize(10, 9);	//重置d3大小为10,并用9填充空白位置
	PrintDeque(d3);
}

//双端插入和删除操作
void test03() {
    
    

	deque<int> d;
	//插入
	d.push_back(10);
	d.push_back(20);
	d.push_front(30);
	d.push_front(40);
	PrintDeque(d);
	cout << "\n------------" << endl;
	//删除
	//为了严谨一般都要获取即将删除的数据进行判断后再删除
	int val = d.front();//获取数据
	d.pop_front();		//进行删除
	val = d.back();		//获取数据
	d.pop_back();		//进行删除
	PrintDeque(d);
}

//评委打分案例(sort 算法排序)
//创建 5 个选手(姓名、得分),10 个评委对 5 个选手进行打分
//得分规则:去除最高分,去除最低分,取出平均分
//按得分对 5 名选手进行排名

class Player {
    
    
public:
	Player(){
    
    }
	Player(string name, int score):mName(name), mScore(score){
    
    }
public:
	string mName;
	int mScore;
};

//创建选手
void Create_Player(vector<Player>& v) {
    
    

	string nameSeed = "ABCDE";
	for (int i = 0; i < 5; i++) {
    
    
		Player p;
		p.mName = "选手";
		p.mName += nameSeed[i];
		p.mScore = 0;

		v.push_back(p);
	}
}
//打分
void Set_Score(vector<Player>& v) {
    
    

	srand(unsigned(time(NULL)));
	for (vector<Player>::iterator it = v.begin(); it != v.end(); it++) {
    
    
		deque<int> dScore;		//存放打分
		//当前学生进行打分
		for (int i = 0; i < 10; i++) {
    
    
			int score = rand() % 41 + 60;
			dScore.push_back(score);
		}

		//进行排序(默认从小到大)
		sort(dScore.begin(), dScore.end());
		//for (deque<int>::iterator dit = dScore.begin(); dit != dScore.end(); dit++)
		//	cout << *dit << "  ";
		//cout << endl;

		//去掉最高分和最低分
		dScore.pop_back();
		dScore.pop_front();

		//求平均分
		int totalScore = 0;
		for (deque<int>::iterator dit = dScore.begin(); dit != dScore.end(); dit++) {
    
    
			totalScore += (*dit);
		}
		int avgScore = totalScore / dScore.size();

		//保存分数
		(*it).mScore = avgScore;
	}
}
//排序规则
bool MyCompare(Player& p1, Player& p2) {
    
    
	//p1<p2返回0,p1>p2返回1
	return p1.mScore > p2.mScore;
}
//根据选手分数进行排名(sort默认从小到大,希望从大到小)
void Print_Rank(vector<Player>& v) {
    
    

	//排序
	sort(v.begin(), v.end(), MyCompare);
	//打印
	for (vector<Player>::iterator it = v.begin(); it != v.end(); it++)
		cout << "姓名:" << it->mName << "\t成绩:" << it->mScore << endl;
}
void test04() {
    
    

	//定义容器保存选手信息
	vector<Player> vPlist;
	Create_Player(vPlist);
	Set_Score(vPlist);
	Print_Rank(vPlist);
}

//简单测试
int main()
{
    
    
	//test01();
	//test02();
	//test03();
	test04();
	
	cout << endl << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43685399/article/details/108610611