当前位置:   article > 正文

C++ STL中的容器适配器详解_c++自己定义一个容器适配器

c++自己定义一个容器适配器

STL其他内容解析:关于C++中STL的理解和应用


容器适配器简介:

C++中的容器适配器是干什么的呢?我们已有容器(比如vector、list、deque),他们支持的的操作很多,比如插入,删除,迭代器访问等等。而我们希望这个容器表现出来的是栈的样子:先进后出,入栈出栈等等,此时,我们没有必要重新动手写一个新的数据结构,而是把原来的容器重新封装一下,改变它的接口,就能把它当做栈使用了。

C++中定义了3种容器适配器,它们让容器提供的接口变成了我们常用的的3种数据结构:栈stack,队列queue和优先队列priority_queue。

默认情况下,栈和队列都是基于deque实现的,而优先级队列则是基于vector实现的。

当然,我们也可以指定自己的实现方式。但是由于数据结构的关系,我们也不能胡乱指定。栈的特点是后进先出,所以它关联的基本容器可以是任意一种顺序容器,因为这些容器类型结构都可以提供栈的操作有求,它们都提供了push_back、pop_back和back操作。 队列queue的特点是先进先出,适配器要求其关联的基础容器必须提供pop_front操作,因此其不能建立在vector容器上;对于优先级队列,由于它要求支持随机访问的功能,所以可以建立在vector或者deque上,不能建立在list上。

 

自定义适配器:

  • stack适配器要求能够push_back,pop_back,back操作,所以stack可以建立在vector、deque、list上(array,forward_list不可以)。
  • queue适配器要求容器具有back,push_back,push_front操作,因此可以在list和deque上构造(vector没有front这个操作)。
  • priority_queue要求容器具有push_back,pop_back,以及随机访问(用来排序)的操作。所以可以用vector和deque。但是不能建立在list上。

  1. 例如:
  2. stack<int, list<int>> s1;
  3. stack<int, vector<int>> s2;

没有迭代器:

C ++迭代器用于对数据结构中的元素进行顺序访问或随机访问。因此,对于根据定义不允许顺序或随机访问的数据结构,迭代器没有任何意义。这就是堆栈和队列没有迭代器的原因。另一方面,向量和列表允许对元素进行顺序和/或随机访问,因此迭代器对于导航这些数据结构是有意义的。

 

适配器详解:

    C++ STL队列queue和优先队列priority_queue的底层实现和用法

    C++ STL栈stack的底层实现和用法

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/197886?site
推荐阅读
相关标签
  

闽ICP备14008679号