1 #include<deque> 2 #include<iostream> 3 using namespace std; 4 5 template<typename T> 6 void printf(deque<T>& deque_) 7 { 8 if (!deque_.empty()) 9 { 10 for (auto d : deque_) 11 { 12 cout << d; 13 } 14 cout << endl; 15 } 16 else 17 { 18 cout << "这个deque是空的啦" << endl; 19 } 20 } 21 22 //构造函数 23 void test01() 24 { 25 deque<int> d1; 26 deque<int> d2(10, 4); // 4444444444 27 deque<int> d3(d2.begin(), d2.end()); 28 deque<int> d4(d3);// 29 printf(d4); 30 } 31 32 //赋值操作 33 void test02() 34 { 35 deque<int> d1; 36 deque<int> d2; 37 deque<int> d3; 38 d1.assign(6, 5);//555555 39 d2.assign(d1.begin(), d1.end()); 40 d3 = d2; 41 // empty size resize 略 42 } 43 44 //deque容器插入与删除 45 void test03() 46 { 47 deque<int> d1; 48 d1.push_back(3); //3 49 d1.push_front(2);// 23 50 d1.push_back(4);// 234 51 d1.push_front(1);// 1234 52 printf(d1);// 1234 53 deque<int>::reverse_iterator itr = d1.rbegin(); 54 cout << "*itr = " << *itr << endl; 55 //删除 56 int val = d1.front(); 57 //删除头元素 58 d1.pop_front(); printf(d1); // 234 59 //删除尾元素 60 d1.pop_back(); printf(d1); // 23 61 } 62 int main() 63 { 64 test01(); 65 test02(); 66 test03(); 67 return 1; 68 }
下面举一个例子:【题目见代码】
解析:既然要打分去掉最低分和最高分,肯定想到排序,然后去除首尾元素。其实,你也可以用multimap,key值自动排序,只是要去除首key值的时候(erase之后),你要重新获取迭代器,后续所有元素下表减1,这种拷贝对性能损耗大。
// 评委打分案例(sort 算法排序) // 创建5个选手(姓名,得分), 10个评委对5个选手打分 // 得分规则:去除最高分,去除最低分,去除平均分 // 按得分对5名选手经行排名 #include<iostream> #include<string> #include<vector> #include<deque> #include<algorithm> using namespace std; template <typename T1> void printf(vector<T1>& vec) { if (vec.empty()) { cout << "empty! " << endl; } else { for (auto& v : vec) { cout << v << " "; } cout << endl; } } template <typename T2> void printf(deque<T2>& vec) { if (vec.empty()) { cout << "empty! " << endl; } else { for (auto& v : vec) { cout << v << " "; } cout << endl; } } class Player { public: Player(string name, int socre) :name_(name), socre_(socre) {}; string name_; int socre_;//根据要求得出的最终评分 }; void createPalyers(vector<string>& names) { string str = "ABCDEF"; string stu = "student"; for (auto& index:str) { string name = stu + index; names.push_back(name); } } bool mycompare(Player& player1,Player& player2) { return player1.socre_ > player2.socre_; } void getSocresAndRank(vector<string>& names) { vector<Player> players; // 给选手随机打分【10个评委10个分数,去除两头,再平均】 for (auto& name:names) { deque<int> socre; // 一个选手的10个分数 for (size_t j = 0; j < 10; j++) { int temp = rand() % 41 + 60; socre.push_back(temp); } sort(socre.begin(), socre.end());//默认从小到大 printf(socre); socre.pop_back(); //删除最大值 socre.pop_front();//删除最小值 printf(socre); //求取平均分 int totalsocres = 0; for (deque<int>::iterator itr = socre.begin(); itr!= socre.end(); itr++) { totalsocres += (*itr); } int avgsocres = totalsocres/ socre.size(); Player player(name, avgsocres);//关联一个人 与 它的分数 players.push_back(player); sort(players.begin(), players.end(), mycompare);//【注:这里遍历类,将分数排序,对应的选手也会被排序,类似key-value】 } //打印最终结果 for (auto&player:players) { cout << "name: " << player.name_.c_str() << " socre = " << player.socre_ << endl; } } int main() { vector<string> names; createPalyers(names); getSocresAndRank(names); return 1; }