deque是常见的双端数组。用处很广,本节就介绍相关概念并实现一个简单的评委打分系统。
- deque的基本概念
- 什么是deque?
- deque的功能
- deque的实现方法
deque常用API
- deque构造函数
- deque赋值
- deque元素存取
- deque大小
- deque插入与删除
deque应用:评委打分系统
- deque基本概念
- 什么是deque?
我们知道vector是一个单口容器,相当于一个动态数组。而deque则是一个双口容器,是一个双端数组。也就是说,deque提供方法能够在首尾以O(1)的时间复杂度插入删除元素。 - deque的基本功能
我们还是以一张图来说明:
- deque实现方法
deque利用分块的连续存储空间来实现首尾元素的插入和删除。
deque利用中控器管理分块的连续存储空间。中控器中存放的是各块内存空间的首地址(即指针)。
- 什么是deque?
deque常用API
deque的初始化
deque<int> d; deque<int> d1(10,1); deque<int> d2(d1); deque<int> d3(d2.begin(),d2.end()); deque<int> d4=d3; for(int i=0;i<d1.size();i++){ cout<<d1[i]<<d2[i]<<d3[i]<<d4[i]<<endl; }
deque赋值
deque<int> d, d2, d3, d4; deque<int> d5(10, 1); d = d5; d2.assign(d5.begin(), d5.end()); d3.assign(10,2); //d4.assign(d3); 没有这种写法 for (int i = 0; i<d.size(); i++){ cout << d[i] << d2[i] << d3[i] << d5[i] << endl; }
deque元素存取
deque<int> d,d1; deque<int> d2(10,1); cout<<d2.front()<<" "<<d2.back()<<endl; for(int i=0;i<d2.size();i++){ cout<<d2.at(i)<<" "; } cout<<endl;
deque大小
deque没有capacity和reservedeque<int> d(10,1); if(d.empty()){ cout<<"d is empty!!!"<<endl; } else{ cout<<"d is not empty!!"<<endl; } cout<<"d.size: "<<d.size()<<endl; for(int i=0;i<d.size();i++){ cout<<"ele "<<i <<" :"<<d.at(i)<<" "; } cout<<endl; d.resize(5); cout<<"d.size: "<<d.size()<<endl; for(int i=0;i<d.size();i++){ cout<<"ele "<<i <<" :"<<d.at(i)<<" "; } cout<<endl;
deque插入和删除
- 插入
- insert(iterator,num,ele);
- push_back(ele) ;
- push_front(ele);
- 删除
- erase(iterator start,iterator end);
- erase(iterator pos);
- clear();
- pop_back();
- pop_front();
这里的插入删除用法跟vector中的用法一样,就不重复了。
- 插入
- deque应用:评委打分系统