摘要: 技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性

上一节介绍了仿函数适配器,这节主要介绍容器适配器和迭代器适配器的概念,其实容器适配器和迭代器其适配器就是封装了一些其他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源码剖析>>
原文:http://www.cnblogs.com/LearningTheLoad/p/7599709.html