ywrby

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

双口容器,可以从头尾两侧操作元素

在这里插入图片描述

特性

  1. 双端插入和删除元素效率较高
  2. 指定位置插入也会导致数据元素移动,降低效率
  3. 可随机存取,效率高

#include<iostream>
#include<deque>
using namespace std;

void PrintDeque(deque<int> d) {
	deque<int>::iterator it = d.begin();
	while (it != d.end()) {
		cout << *it << "  ";
		it++;
	}
	cout << endl;

}
//deque初始化,构造函数
void dequeTest1() {
	deque<int> d1 = {0,5,56,45};   //无参构造
	deque<int> d2(10, 5);   //第一个参数表示数量,第二个参数表示元素
	deque<int> d3(d2.begin(), d2.end());  //以所给迭代器区间初始化
	deque<int> d4(d3);  //拷贝构造
	PrintDeque(d1);
	PrintDeque(d2);
	PrintDeque(d3);
	PrintDeque(d4);
}
//赋值,大小操作
void dequeTest2() {
	deque<int> d;
	deque<int> d1 = { 0,66,44,2,12 };
	deque<int> d2;
	deque<int> d3;
	d.assign(10, 5);
	d2.assign(d1.begin() + 2, d1.end());  //迭代器指定区间赋值
	d3 = d2;  //重载等号进行赋值
	d.swap(d3);  //两个容器交换
	//deque容器在释放空间时,不需要我们再干预,其自身可以实现自动释放多余内存空间
	if (d.empty()) {
		cout << "容器是空的" << endl;
	}
	else {
		cout << "容器不是空的,大小是:" << d.size() << endl;
	}
	//resize()函数用法与vector完全一致



}

//插入删除操作
void dequeTest3() {
	deque<int> d1 = { 0,5,56,45 };
	d1.push_back(233);  //末尾加入
	d1.push_front(11);  //开头插入
	PrintDeque(d1);
	d1.pop_back();   //末尾删除
	d1.pop_front();  //末尾插入
	PrintDeque(d1);
}



int main() {
	dequeTest3();
	return 0;
}

案例

#include<iostream>
#include<deque>
#include<vector>
#include<algorithm>
using namespace std;
//deque打分框架(sort算法排序)
//创建五个选手,10个评委对5个选手打分
//得分规则:去掉最高分,去掉最低分,去除平均分
//按得分对五位选手进行排名

//定义选手类
class Player {
public:
	Player(){}
	Player(string name,int score):mName(name),mScore(score){}
	string mName;
	int mScore;
};


//创建选手
void CreatePlayer(vector<Player>& v) {
	string nameSpeed = "ABCDE";  //姓名种子
	for (int i = 0; i < 5; i++) {
		Player p;
		p.mName = "选手";
		p.mName += nameSpeed[i];
		p.mScore = 0;
		v.push_back(p);
	}
}


//打分
void SetScore(vector<Player>& v) {
	vector<Player>::iterator it = v.begin();
	for (it; it != v.end(); it++) {
		//选择当前学生并进行打分
		deque<int> d;
		for (int i = 0; i < 10; i++) {
			int score = rand() % 40 + 60;
			d.push_back(score);
		}
		//对分数进行排序,默认从小到大
		sort(d.begin(),d.end());
		//去除最大最小项
		d.pop_back();
		d.pop_front();
		//求平均分并将平均分赋给学生
		int score = 0;
		for (deque<int>::iterator itd = d.begin(); itd != d.end();itd++) {
			score += (*itd);
		}
		score = score / d.size();
		(*it).mScore = score;
	}
}

//排序规则
bool MyCompare(Player& p1,Player& p2){
	return p1.mScore > p2.mScore;
}


//根据分数排序
void PrintRank(vector<Player>& v) {
	//排序
	sort(v.begin(), v.end(), MyCompare);
	//打印
	int i = 1;
	for (vector<Player>::iterator it = v.begin(); it != v.end(); it++) {
		
		cout << "姓名:" << (*it).mName << "  分数:" << (*it).mScore << "  排名:" << i << endl;
		i++;
	}
}

int main() {

	vector<Player> player1;
	CreatePlayer(player1);
	SetScore(player1);
	PrintRank(player1);

	return 0;
}
posted on 2020-02-20 20:01  ywrby  阅读(161)  评论(0编辑  收藏  举报