#include <iostream> using namespace std; #include <vector> #include <deque> #include <algorithm> //deque 容器 是双口容器, 可以从头尾部都可以添加,删除 push_front pop_front push_back pop_back //deque 特性 //双端插入和删除元素效率高 //指定位置插入也会导致数据元素移动,降低效率 //可以随机存取,效率高 //deque 常用API /* void printdeque(deque<int> &v) { for(deque<int>::iterator it=v.begin();it!=v.end();it++) { cout<<*it<<endl; } } //deque 初始化 void test1() { deque<int> d1; deque<int> d2(10,5); deque<int> d3(d2.begin(),d2.end()); deque<int> d4(d3); for (deque<int>::iterator it=d4.begin();it!=d4.end();it++) { cout<<*it<<endl; } } //赋值 大小操作 empty() size() resize() void test2() { deque<int> d1; deque<int> d2; deque<int> d3; d1.assign(10,5); d2.assign(d1.begin(),d1.end());//迭代器指定区间进行赋值 d3=d2; d1.swap(d3); if(d1.empty()) { cout<<"空"<<endl; } else { cout<<"不为空"<<endl; } } //deque 容器的插入和删除 push_back pop_back push_front pop_front void test3() { deque<int> v; v.push_back(11); v.push_back(22); v.push_back(33); v.push_front(44); v.push_front(55); printdeque(v); int val=v.front();//查看要被删除的数据 v.pop_front();//删除 } // //int main() { // test3(); // return 0; //} //deque 数据存储 */ //---------------------------------------------- //deque 案例练习 //案例:创建5个选手(姓名,得分),10个评委对5个选手进行打分, //得分规则:去除最高分,去除最低份,取出平均分 //按得分对5名选手进行排名 #include <algorithm> class person { public: string name; int score; public: person() {} person(string name,int score) { this->name=name; this->score=score; } }; void create_person(vector<person> &v) { string s="ABCDE"; for(int i=0;i<5;i++) { person p; p.name="选手"; p.name+=s[i]; v.push_back(p); } } void printscore(int v) { cout<<v<<" "; } //打分 void setscore(vector<person> &v) { for (vector<person>::iterator it =v.begin();it!=v.end();it++) { deque<int> d; for (int i = 0; i <10 ; ++i) { int score=rand()%41+60; d.push_back(score); } sort(d.begin(),d.end());//对随机生成的数据进行排序 默认排序为从小到大 d.pop_back();//删除最后一个 去除最高 d.pop_front();//删除第一个 去除最低 for_each(d.begin(),d.end(),printscore); cout<<endl; //求平均 int total=0; for(deque<int>::iterator id=d.begin();id!=d.end();id++) { total+=*id; } int average=total/d.size(); (*it).score=average; } } //排序规则 bool mycompare(person& p1,person &p2)//传入容器中需要比对的对象 { return p1.score<p2.score; } //根据分数排序 void score_rank(vector<person> &v) { //注意 容器和算法,通过迭代器沟通 sort算法中,若容器元素是int等常用数据类型则sort()为默认排序,可以直接排序,若容器中是对象,则需要用到第三个元素。 //第三个元素是自定义排序规则 sort(v.begin(),v.end(),mycompare);//mycopare 为自定义的排序规则 for(vector<person>::iterator itt=v.begin();itt!=v.end();itt++) { cout<<(*itt).name<<" "<<(*itt).score<<endl; } } int main() { vector<person> v; create_person(v); setscore(v); score_rank(v); }
c++ 中的deque容器(案例练习)
最新推荐文章于 2024-08-23 11:39:53 发布