STL deque
Posted 天码丶行满
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL deque相关的知识,希望对你有一定的参考价值。
deque 分块储存数据,双口分段式连续内存空间容器,无大小和容量概念
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<deque> #include<vector> #include<ctime> #include<algorithm> #include<string> using namespace std; void printDeque(const deque<int> &d){ for (deque<int>::const_iterator it = d.begin(); it != d.end(); ++it){ cout << *it << " "; } //deque<int>::reverse_iterator cout << endl; } //1. deque构造函数 /* deque<T> deqT;//默认构造形式 deque(beg, end);//构造函数将[beg, end)区间中的元素拷贝给本身。 deque(n, elem);//构造函数将n个elem拷贝给本身。 deque(const deque &deq);//拷贝构造函数。 */ void test01(){ int arr[] = { 1, 2, 3, 4, 5, 6 }; deque<int> d1(arr,arr+sizeof(arr)/sizeof(int)); printDeque(d1); deque<int> d2(10, 6); printDeque(d2); } //2.deque赋值操作 /* assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。 assign(n, elem);//将n个elem拷贝赋值给本身。 deque& operator=(const deque &deq); //重载等号操作符 swap(deq);// 将deq与本身的元素互换 */ void test02(){ int arr[] = { 1, 2, 3, 4, 5, 6 }; deque<int> d1(arr, arr + sizeof(arr) / sizeof(int)); printDeque(d1); deque<int> d2; d2.assign(d1.begin(),d1.end()); d2.push_back(100); printDeque(d2); cout << "--------------" << endl; d1.swap(d2); printDeque(d1); printDeque(d2); } //3. deque大小操作 /* deque.size();//返回容器中元素的个数 deque.empty();//判断容器是否为空 deque.resize(num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。 deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除。 */ void test03(){ deque<int> d; cout << d.size() << endl; if (d.empty()){ cout << "空!" << endl; } d.resize(10, 7); printDeque(d); } //4. deque双端插入和删除操作 /* push_back(elem);//在容器尾部添加一个数据 push_front(elem);//在容器头部插入一个数据 pop_back();//删除容器最后一个数据 pop_front();//删除容器第一个数据 */ void test04(){ deque<int> d; d.push_back(10); d.push_front(20); printDeque(d); d.pop_back(); d.pop_front(); cout << d.size() << endl; } //5. deque插入操作 /* insert(pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的位置。 insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。 insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。 */ void test05(){ deque<int> d; d.push_back(10); d.push_back(20); d.push_back(30); d.push_back(40); d.push_back(50); d.insert(d.begin() + 1,100); d.insert(d.begin() + 2, 2, 0); printDeque(d); deque<int> d2; d2.push_back(100); d2.push_back(200); d2.push_back(300); d2.insert(d2.begin() + 1, d.begin() + 1, d.end()); printDeque(d2); } //6. deque删除操作 /* clear();//移除容器的所有数据 erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。 erase(pos);//删除pos位置的数据,返回下一个数据的位置。 */ void test06(){ deque<int> d; d.push_back(10); d.push_back(20); d.push_back(30); d.push_back(40); d.push_back(50); d.erase(d.begin()); d.erase(d.begin(), d.end()); //d.clear(); cout << d.size() << endl; } //学生打分案例 //有5个学生,10个评委分别对这5个学生进行打分,去除最低分,去除最高分,取平均分 class Student{ public: string mName; int mScore; }; //创建学生 void CreateStudents(vector<Student> &vec){ string seedName = "ABCDE"; for (int i = 0; i < 5;i ++){ //创建学生 Student stu; stu.mName = "学生"; stu.mName += seedName[i]; stu.mScore = 0; //保存学生信息 vec.push_back(stu); } } //对每一个学生进行打分 void SetSocre(vector<Student> &vec){ //种下种子 srand((unsigned int)time(NULL)); //遍历学生 for (vector<Student>::iterator it = vec.begin(); it != vec.end(); ++it){ //保存分数 deque<int> dScore; for (int i = 0; i < 10;i ++){ int score = rand() % 70 + 30; dScore.push_back(score); } //排序 sort(dScore.begin(), dScore.end()); //去除最高分,去除最低分 dScore.pop_back(); dScore.pop_front(); //求总分 int totalScore = 0; for (deque<int>::iterator sit = dScore.begin(); sit != dScore.end();++sit){ totalScore += (*sit); } //求平均分 int avgScore = totalScore / dScore.size(); //保存当前学生分数 it->mScore = avgScore; } } //给学生排序,并且输出 bool mycomapre(Student &s1,Student &s2){ return s1.mScore > s2.mScore; } void ShowStudengsByScore(vector<Student> &vec){ sort(vec.begin(), vec.end(), mycomapre); //学生成绩从大到小显示 for (vector<Student>::iterator it = vec.begin(); it != vec.end(); ++it){ cout << "Name:" << it->mName << " Score:" << it->mScore << endl; } } void test07(){ vector<Student> vStus; //保存学生信息 //1.创建学生 CreateStudents(vStus); //2.评委给学生打分 SetSocre(vStus); //3.根据成绩降序排列学生 ShowStudengsByScore(vStus); } int main(){ //test01(); //test02(); //test03(); //test04(); //test05(); //test06(); test07(); system("pause"); return EXIT_SUCCESS; }
以上是关于STL deque的主要内容,如果未能解决你的问题,请参考以下文章
deque容器系列一基于STL源码分析deque容器整体实现及内存结构