使用list容器之前必须加上头文件:#include;
list容器的底层实现:
和 array、vector 这些容器迭代器的实现方式不同,由于 list 容器的元素并不是连续存储的,所以该容器迭代器中,必须包含一个可以指向 list 容器的指针,并且该指针还可以借助重载的 *、++、--、==、!= 等运算符,实现迭代器正确的递增、递减、取值等操作 。
template<tyepname T,...>struct __list_iterator{__list_node<T>* node;//...//重载 == 运算符bool operator==(const __list_iterator& x){return node == x.node;}//重载 != 运算符bool operator!=(const __list_iterator& x){return node != x.node;}//重载 * 运算符,返回引用类型T* operator *() const {return *(node).myval;}//重载前置 ++ 运算符__list_iterator<T>& operator ++(){node = (*node).next;return *this;}//重载后置 ++ 运算符__list_iterator<T>& operator ++(int){__list_iterator<T> tmp = *this;++(*this);return tmp;}//重载前置 -- 运算符__list_iterator<T>& operator--(){node = (*node).prev;return *this;}//重载后置 -- 运算符__list_iterator<T> operator--(int){__list_iterator<T> tmp = *this;--(*this);return tmp;}//...}stackstack没有迭代器,是一种容器适配器,用于在LIFO(后进先出)的操作,其中元素仅从容器的一端插入和提取 。

文章插图
stack底层一般用list或deque实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
底层用deque实现:
//deque<T> >中间有个空格是为了兼容较老的版本template <class T, class Sequence = deque<T> >class stack {// 以下的 __STL_NULL_TMPL_ARGS 会开展为 <>friend bool operator== __STL_NULL_TMPL_ARGS (const stack&, const stack&);friend bool operator< __STL_NULL_TMPL_ARGS (const stack&, const stack&);public:typedef typename Sequence::value_type value_type;typedef typename Sequence::size_type size_type;typedef typename Sequence::reference reference;typedef typename Sequence::const_reference const_reference;protected:Sequence c; // 底层容器public:// 以下完全利用 Sequence c 的操作,完成 stack 的操作 。bool empty() const { return c.empty(); }size_type size() const { return c.size(); }reference top() { return c.back(); }const_reference top() const { return c.back(); }// deque 是两头可进出,stack 是末端进,末端出(所以后进者先出) 。void push(const value_type& x) { c.push_back(x); }void pop() { c.pop_back(); }};template <class T, class Sequence>bool operator==(const stack<T, Sequence>& x, const stack<T, Sequence>& y) {return x.c == y.c;}template <class T, class Sequence>bool operator<(const stack<T, Sequence>& x, const stack<T, Sequence>& y) {return x.c < y.c;}底层用list实现:#include<stack> #include<list> #include<algorithm> #include <iostream> using namespace std; int main(){ stack<int, list<int>> istack; istack.push(1); istack.push(3); istack.push(5); cout << istack.size() << endl; //3 cout << istack.top() << endl;//5 istack.pop(); cout << istack.top() << endl;//3 cout << istack.size() << endl;//2 system("pause"); return 0; } queuequeue 是一种容器适配器,用于在FIFO(先入先出)的操作,其中元素插入到容器的一端并从另一端提取 。
文章插图
队列不提供迭代器,不实现遍历操作 。
template <class T, class Sequence = deque<T> >class queue {friend bool operator== __STL_NULL_TMPL_ARGS (const queue& x, const queue& y);friend bool operator< __STL_NULL_TMPL_ARGS (const queue& x, const queue& y);public:typedef typename Sequence::value_type value_type;typedef typename Sequence::size_type size_type;typedef typename Sequence::reference reference;typedef typename Sequence::const_reference const_reference;protected:Sequence c;public:bool empty() const { return c.empty(); }size_type size() const { return c.size(); }reference front() { return c.front(); }const_reference front() const { return c.front(); }reference back() { return c.back(); }const_reference back() const { return c.back(); }void push(const value_type& x) { c.push_back(x); }void pop() { c.pop_front(); }};template <class T, class Sequence>bool operator==(const queue<T, Sequence>& x, const queue<T, Sequence>& y) {return x.c == y.c;}template <class T, class Sequence>bool operator<(const queue<T, Sequence>& x, const queue<T, Sequence>& y) {return x.c < y.c;}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 平南候与狄仁杰谁大 狄仁杰谋反
- 汉朝刘彻母亲是 汉武帝刘彻与刘秀的关系
- 古希腊与中国神话
- 黄茶加工与审评,勐宋沱茶审评滋味
- 赤車使者酒方的功效与作用
- 虾米酒的功效与作用
- 龙葵酒的功效与作用
- 夏英公酒浸饮子的功效与作用
- 二 仙酒方的功效与作用
- 三 豉酒方的功效与作用
