c++之容器适配器
来源:互联网 发布:各国劳动效率数据 编辑:程序博客网 时间:2024/06/06 01:38
基本概念
c++STL的三种基本容器:vector、list、deque。同时c++STL也提供了三种容器适配器:stack、queue、priority_queue。
其中stack栈能够用任何序列容器实现:vector、list、deque。默认情况下为deque。
适配器queue使用:deque、list实现。默认情况下为deque。
适配器priority_queue使用:vector、deque实现。默认情况下为vector。
什么是容器适配器?
我们以stack栈为例:以某种既有容器作为底部结构,将其接口改变,使之符合“先进先出”的特性,形成一个stack,由于stack是以底部容器完成其所有工作,而具有这种“修改某物接口,形成另一种风貌”的性质者,称为adapter(适配器),因此,STL stack往往不被归类为container(容器),而被归类为container adapter(容器适配器)。同理queue,priority_queue也是容器适配器。
默认stack是通过deque容器实现的,deque是双向开口的数据结构,若以deque为底部结构并封闭其头端开口,便很容易形成一个stack。
//deque的STL源码// deque的数据结构 template <class T, class Alloc = alloc, size_t BufSiz = 0> class deque { public: // Basic types typedef T value_type; typedef value_type* pointer; typedef value_type& reference; typedef size_t size_type; typedef ptrdiff_t difference_type; public: // Iterators typedef __deque_iterator<T, T&, T*, BufSiz> iterator; protected: // Internal typedefs typedef pointer* map_pointer; // 这个提供STL标准的allocator接口, 见<stl_alloc.h> typedef simple_alloc<value_type, Alloc> data_allocator; typedef simple_alloc<pointer, Alloc> map_allocator; .................}
//STL中stack的源码template <class T,class Sequence = deque<T> >class stack{ //以下__STL_NULL_TMPL_ARGS 会展开为<>. friend bool operator==__STL_NULL_TMPL_ARGS(const stack&,const stack&); friend bool operator<__STL_NULL_TMPL_ARGS(const stack&,const stack&); public: typedef typename Sequence::value_type value_type; typedef typename Sequence::size_type size_type; typedef typename Sequence::reference reference; typedef typename Sequence::const_reference const_reference; protect: Sequence c://底层容器 public: //以下完全是利用Sequence c的操作,完成stack的操作。 bool empty() const {return c.empty();} size_type size() const {return c.size();} reference top() {return c.back();} const_reference top() const {return c.back();} //deque是两头可进出,stack是末端进,末端出。 void push(const value_type& x) {c.push_back(x);} void pop() {c.pop_back();}}template<class T,class Sequence>bool operator==(const stack<T,Sequence>& x,const stack<T,Sequence>& y){ return x.c==y.c;}template<class T,class Sequence>bool operator<(const stack<T,Sequence>& x,const stack<T,Sequence& y>){ return x.c<y.c;}
示例程序:
Reverse Nodes in k-Group (Hard) 栈实现方式
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} };ListNode* reverseKGroup(ListNode* head,int k){ if(k==0||k==1) return head; if(head==NULL) return NULL; ListNode* newHead=new ListNode(-1); ListNode* movPtr=newHead; stack<ListNode*>MyStack; int coun=k; ListNode* tempRecord=NULL; while(1) { tempRecord=head;//记录开始下次循环时的首指针; while(coun&&head!=NULL) { MyStack.push(head); head=head->next; coun--; } if (coun==0&&head!=NULL) { while(!MyStack.empty()) { movPtr->next=MyStack.top(); MyStack.pop(); movPtr=movPtr->next; movPtr->next=NULL; } coun=k; continue; } else if (coun==0 &&head==NULL) { while(!MyStack.empty()) { movPtr->next=MyStack.top(); MyStack.pop(); movPtr=movPtr->next; movPtr->next=NULL; } return newHead->next; } else { movPtr->next=tempRecord; return newHead->next; } }}
0 0
- 容器适配器之stack
- 容器适配器之queue
- 容器适配器之priority_queue
- STL 之容器适配器
- 容器适配器之详解
- STL之容器适配器
- c++之容器适配器
- C++(14)STL分析与实践之容器适配器
- 【C++】STL常用容器总结之六:基于deque的顺序容器适配器
- 初探STL之容器适配器
- C++容器适配器之Queue
- 【足迹C++primer】29、容器适配器
- 学习C++——容器适配器
- c++STL(五)容器适配器
- STL之容器适配器:stack,queue , priority_queue
- 容器适配器
- 容器适配器
- 容器适配器
- 算法学习(二) 贪婪算法
- iOS 系统相机长按拍照问题
- L1-007. 念数字
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- Android 事件处理的理解
- c++之容器适配器
- LitePal使用总结
- 数据块写函数fwrite
- iOS一分钟搞定加入购物车的交互动画【转】
- 7. Reverse Integer (转置整数)
- 哈希树实例代码
- MQ常用管理命令
- 解析JSON入门
- 常用的机器学习算法比较