STL-deque容器
2017-10-02 13:11
267 查看
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #include<vector> #include<deque> #include<algorithm> #include<ctime> #include<string> void PrintDeque(deque<int>& d) { for (deque<int>::const_iterator it = d.begin(); it != d.end(); ++it) { cout << *it << " "; } cout << endl; } /* deque构造函数 deque<T> deqT;//默认构造形式 deque(beg, end);//构造函数将[beg, end)区间中的元素拷贝给本身。 deque(n, elem);//构造函数将n个elem拷贝给本身。 deque(const deque &deq);//拷贝构造函数。 */ void test1() { deque<int> d; d.push_back(1); d.push_back(2); d.push_back(3); d.push_back(4); PrintDeque(d); int arr[] = { 1, 2, 3, 4, 5 }; deque<int> d2(arr, arr + sizeof(arr)/sizeof(int)); PrintDeque(d2); } /* deque赋值操作 assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。 assign(n, elem);//将n个elem拷贝赋值给本身。 deque& operator=(const deque &deq); //重载等号操作符 swap(deq);// 将deq与本身的元素互换 */ void test2() { int arr[] = { 1, 2, 3, 4, 5 }; deque<int> d1(arr, arr + sizeof(arr) / sizeof(int)); PrintDeque(d1); deque<int> d2; d2.assign(d1.begin(), d1.end()); d2.push_back(10); PrintDeque(d2); cout << "-------------------------------" << endl; d2.swap(d1); PrintDeque(d1); PrintDeque(d2); } /* deque大小操作 deque.size();//返回容器中元素的个数 deque.empty();//判断容器是否为空 deque.resize(num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。 deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除。 */ void test3() { deque<int> d; cout << d.size() << endl; while (d.empty()) { cout << "NULL" << endl; break; } d.resize(10, 5); cout << d.size() << endl; PrintDeque(d); } /* deque双端插入和删除操作 push_back(elem);//在容器尾部添加一个数据 push_front(elem);//在容器头部插入一个数据 pop_back();//删除容器最后一个数据 pop_front();//删除容器第一个数据 */ void test4() { deque<int> d; d.push_back(1); d.push_back(2); d.push_back(3); d.push_front(4); PrintDeque(d); d.pop_back(); d.pop_front(); PrintDeque(d); } /* deque插入操作 insert(pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的位置。 insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。 insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。 */ void test5() { deque<int> d; d.push_back(1); d.push_back(2); d.push_back(3); d.push_back(4); d.insert(d.begin()+2, 5); d.insert(d.begin() + 3, 2, 6); int arr[] = { 10, 20, 30 }; d.insert(d.begin() + 5, arr, arr + sizeof(arr) / sizeof(int)); PrintDeque(d); } /* eque删除操作 clear();//移除容器的所有数据 erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。 erase(pos);//删除pos位置的数据,返回下一个数据的位置。 */ void test6() { deque<int> d; d.push_back(10); d.push_back(20); d.push_back(30); d.push_back(40); //d.clear(); //d.erase(d.begin(), d.end()); //d.erase(d.begin() + 1); deque<int>::iterator it = d.erase(d.begin() + 1); cout << *it << endl; PrintDeque(d); cout << d.size() << endl; } //学生打分案例 //有5个学生,10个评委分别对这5个学生进行打分,去除最低分,去除最高分,取平均分 class student { public: int score; string name; }; //创建学生 void GreatStudent(vector<student& 4000 gt;& s) { string tname = "ABCDE"; for (int i = 0; i < 5; ++i) { //初始化学生信息 student stu; stu.name = "学生"; stu.name += tname[i]; stu.score = 0; //保存学生的信息 s.push_back(stu); } } //评委给每一个学生打分 void SetScore(vector<student>& s) { //中下种子 srand((unsigned)time(NULL)); for (vector<student>::iterator it = s.begin(); it != s.end(); ++it) { //保存分数容器 deque<int> dscore; for (int i = 0; i < 10; ++i) { int tscore = rand() % 60 + 40; dscore.push_back(tscore); } //排序 sort(dscore.begin(), dscore.end()); //去除最高和最低分求平均分 dscore.pop_back(); dscore.pop_front(); //总分 int TotalScore = 0; for (deque<int>::iterator it = dscore.begin(); it != dscore.end();++it) { TotalScore += (*it); } //平均分 int AvgScore = TotalScore / dscore.size(); it->score = AvgScore; } } bool MyComapre(student& s1,student& s2) { return s1.score < s2.score; } //根据学生成绩打印 void ShowStudentsByScore(vector<student>& s) { sort(s.begin(),s.end(),MyComapre); for (vector<student>::iterator it = s.begin(); it != s.end(); ++it) { cout << "Name:" << it->name << "Score:" << it->score << endl; } } void test7() { //保存每一个学生信息 vector<student> s; //创建学生 GreatStudent(s); //评委给学生打分 SetScore(s); //根据学生成绩打印 ShowStudentsByScore(s); } int main() { //test1(); //test2(); //test3(); //test4(); //test5(); //test6(); test7(); system("pause"); return 0; }
Deque是由一段一段的定量的连续空间构成。一旦有必要在deque前端或者尾端增加新的空间,便配置一段连续定量的空间,串接在deque的头端或者尾端
打印结果:
相关文章推荐
- C++ STL学习之三:序列式容器deque深入学习
- stl容器区别: vector list deque set map-底层实现
- stl容器区别(内存布局和使用场合): vector list deque set map
- C++ STL容器deque内部实现原理
- C++ STL学习笔记三 deque双端队列容器
- STL容器中deque、map和multiset用法
- STL顺序容器(vector,list,deque)测试
- STL源代码剖析 容器 stl_deque.h
- STL提供了三个最基本的容器:vector,list,deque
- STL容器分析--deque
- STL系列之deque双端队列+vector向量容器
- C++ STL学习之三:容器deque深入学习
- STL容器总结之deque
- C++ STL学习容器deque深入学习
- STL顺序容器-deque(双向队列)
- STL容器之Deque
- 【C++ STL学习之三】容器deque深入学习
- 转:STL提供了三个最基本的容器:vector,list,deque
- STL容器 vector,list,deque 性能比较
- stl提供了三个最基本的容器:vector,list,deque