STL源码剖析——容器配接器

stack

  • stack是一种先进后出的数据结构。它还有一个出口。
    这里写图片描述

  • 以某种既有容器作为底部结构,将其接口改变,使之符合“先进后出”的特性,形成一个stack,是很容易的。

  • deque是双向开口的数据结构,以deque为底部结构并封闭其头端开口,便可形成stack。

  • stack没有迭代器。只有stack顶端的元素,才有机会被外界取用。stack不提供走访功能,也不提供迭代器。

  • SGI STL以deque作为缺省情况下的stack底部结构。

  • list作为stack的底层容器亦可。

#include<iostream>
#include<stack>
#include<list>

using namespace std;

int main(int argc, char* argv[]) {
    stack<int> s1;  //默认底层结构是deque,同stack<int, deque<int>> s2;
    s1.push(1);
    cout << s1.top() << endl;
    s1.pop();
    stack<int, list<int>> s2;  //以list作为底层结构
    s2.push(1);
    s2.push(2);
    s2.push(3);
    while (s2.size() != 0) {
        cout << s2.top() << endl; //3,2,1
        s2.pop();
    }
    getchar();
    return 0;
}

queue

  • queue是一种先进先出的数据结构。它有两个出口。
    这里写图片描述

  • 以某种既有容器作为底部结构,将其接口改变,使之符合“先进先出”的特性,形成一个queue,是很容易的。

  • deque是双向开口的数据结构,以deque为底部结构便可形成queue。

  • queue没有迭代器。只有queue顶端的元素,才有机会被外界取用。queue不提供遍历功能,也不提供迭代器。

  • SGI STL以deque作为缺省情况下的queue底部结构。

  • list作为queue的底层容器亦可。

#include<iostream>
#include<queue>
#include<list>

using namespace std;

int main(int argc, char* argv[]) {
    queue<int> s1;  //默认底层结构是deque,同queue<int, deque<int>> s2;
    s1.push(1);
    cout << s1.front() << endl;
    s1.pop();
    queue<int, list<int>> s2;  //以list作为底层结构
    s2.push(1);
    s2.push(2);
    s2.push(3);
    while (s2.size() != 0) {
        cout << s2.front() << endl;  //1,2,3
        s2.pop();
    }
    getchar();
    return 0;
}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值