容器适配器

xiaoxiao2021-03-01  24

每种容器都提供了一组接口,如果容器中的接口不能满足需求,那么重新编写容器还是改变我们的需求应该构造一个容器接口到需求接口之间的转换器,称为容器适配器。容器适配器将原容器进行了一层封装,底层基于普通容器,上层对外提供封装后的新接口,满足不同使用者的需求。常用的栈stack、队列deque、优先级队列priority_queue在STL中都有自己的容器适配器。容器适配器对使用者是个黑盒,使用者无需知道容器适配器封装的容器类型,而只需了解容器适配器提供的接口。除了使用STL提供的容器适配器,也可以自己构造容器适配器,将STL中的容器进行封装,对外提供所需的接口。容器适配器可以封装的容器类型根据容器适配器对外提供的接口和容器适配器的内部算法而定。但是任何容器适配器对底层容器都有一些通用的要求,例如,底层容器必须支持添加删除 和访问尾元素操作,因此array不能作为容器适配器的底层容器。栈适配器和队列适配器默认的底层容器是deque,优先队列适配器默认的底层容器是vector。在创建容器适配器的对象时,也可以指定其他合理的容器作为容器适配器的底层容器。创建容器适配器对象的方式如下:

栈:

stack<int> s;//默认使用deque

stack<int,vector<int>> s;//指定使用vector

队列:

queue<int> q;//默认使用deque

queue<int,lise<int>> q;//指定使用list

优先队列:

priority_queue<int> p;//默认使用vector

priority_queue<int,deque<int>> p;//指定使用deque

priority_queue<int,vector<int>,cmp>> p;//指定使用vector和权重比较函数cmp

注意:

容器适配器和底层容器是组合的关系,插入容器适配器中的元素最终都保存在底层容器中,容器适配器中的数据成员包括一个用于存储元素的底层容器对象和一些辅助数据。

转载请注明原文地址: https://www.6miu.com/read-3100218.html

最新回复(0)