C++ STL中的容器适配器详解

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上。

例如:
stack<int, list<int>> s1;
stack<int, vector<int>> s2;

没有迭代器:

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

 

适配器详解:

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

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

 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值