C++ 适配器到底是个啥概念, 函数适配器,迭代器适配器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 适配器到底是个啥概念, 函数适配器,迭代器适配器相关的知识,希望对你有一定的参考价值。
c++中的适配器有三种:容器适配器,迭代器适配器,函数适配器下面一一介绍
容器适配器:因为这些容器都是基于其他标准容器实现的所以叫做容器的适配器,具体的有stack,queue,priority_queue,默认的情况下,stack和queue基于deque而实现的,,priority_queue在vector上实现的,可以根据第二个实参指定容器的类型,但一定要符合标准,queue要求要有push_front操作因此不能建立在vector上面,priority_front要求有随机访问的功能,因此建立在vector上面。优先级队列默认采用<排序的>
2.迭代适配器:插入器是一种迭代器适配器,带有一个容器参数,并生成一个迭代器,提供了三种插入器back_inserter(容器),front_inserter(容器),inserter(容器,位置)
3.函数适配器,用于扩展一元和二元函数对象,如functor 函数对像等等。用于容器与算法之前的操作时使用。
参考技术A 和数组一样,是数组的替代品,STL标准库-容器适配器
技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性
上一节介绍了仿函数适配器,这节主要介绍容器适配器和迭代器适配器的概念,其实容器适配器和迭代器其适配器就是封装了一些其他class的方法,非常好理解.
如果你想让一个calss拥有另一个class的功能,你都可以这样做:1.继承 2.包含
迭代器适配器 运用继承方式,实现适配功能,其实现与仿函数适配器相似.
容器适配器中主要运用的就是包含,即一个类含的一个成员变量是另一个类,本节简单介绍两个容器适配器
容器适配器
queue 先进先出
template<typename _Tp, typename _Sequence = deque<_Tp> >//底层实现为deque class queue { // concept requirements typedef typename _Sequence::value_type _Sequence_value_type; __glibcxx_class_requires(_Tp, _SGIAssignableConcept) __glibcxx_class_requires(_Sequence, _FrontInsertionSequenceConcept) __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept) __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept) ... protected: _Sequence c;//包含成员变量deque public: ... explicit queue(const _Sequence& __c) : c(__c) { } ... bool empty() const //queue的函数封装了一个deque的一些函数,产生了自己的独特性质,先进先出 { return c.empty(); } /** Returns the number of elements in the %queue. */ size_type size() const { return c.size(); } ... }
stack 先进后出
template<typename _Tp, typename _Sequence = deque<_Tp> > class stack { ... protected: // See queue::c for notes on this name. _Sequence c;//底层实现是deque public: // XXX removed old def ctor, added def arg to this one to match 14882 /** * @brief Default constructor creates no elements. */ #if __cplusplus < 201103L explicit stack(const _Sequence& __c = _Sequence()) : c(__c) { } #else explicit stack(const _Sequence& __c) : c(__c) { } explicit stack(_Sequence&& __c = _Sequence()) : c(std::move(__c)) { } #endif /** * Returns true if the %stack is empty. */ bool empty() const { return c.empty(); } //封装了deque得方法 /** Returns the number of elements in the %stack. */ size_type size() const { return c.size(); } }
参考侯捷<<STL源码剖析>>
以上是关于C++ 适配器到底是个啥概念, 函数适配器,迭代器适配器的主要内容,如果未能解决你的问题,请参考以下文章