【STL学习】容器篇-适配器容器

原创 2015年11月20日 19:25:43

STL中的适配器容器共有三种:
queue //队列
stack //栈
priority_queue //优先级队列

适配器容器的特点:没有迭代器,只有固定的出入口。不可插入元素。


queue:
特点:先进先出(吃多了吐);
容器方式
push() 往队列中添加元素(加入队列)
pop() 弹出队列
实例代码:

    queue<int>  quTest;
    quTest.push(10);
    quTest.push(12);
    quTest.push(80);
    quTest.push(15);  //加入队列

    while (!quTest.empty())
    {
        cout <<"front: "<< quTest.front() << " ";  //访问第一个元素
        cout << "back: " << quTest.back() << endl;  //back访问队列尾的元素
        quTest.pop(); //这里要注意,一定要弹出,front只是访问元素,不会弹出。
    }
    cout << endl;

代码运行结果:
这里写图片描述
stack:
特点:先进后出(栈容器类似于一个桶,先装入的元素在桶低,被后面装入得元素压在下面,所以后出,后入栈的元素在栈顶,所以先出。)
代码示例:

    stack<string> skTest;
    skTest.push("我先入栈");
    skTest.push("我第二个入栈");
    skTest.push("我第三个入栈");
    skTest.push("我最后入栈");
    int iNum = 1;
    while (!skTest.empty())
    {
        cout << "我是第" << iNum++<<"个被输出:" << skTest.top().c_str() << " " << endl;  //stack访问元素的方法为top,和queue不同
        skTest.pop();  //适配器容器特点,一定要记pop()
    }

代码运行结果:
这里写图片描述


priority_queue:
优先级容器:
特点:队列有优先级的划分,(默认调用模板类仿函数less,会调用队列存储对象的 <(小于) 运算符)。
优先级的自定义:
可以通过自定义仿函数,重载<运算符,和自定义函数,以及λ函数。
测试代码:

priority_queue<int> pquTest;
    pquTest.push(1);
    pquTest.push(5);
    pquTest.push(10);
    pquTest.push(8);
    while (!pquTest.empty())
    {
        cout << pquTest.top() << " ";
        pquTest.pop();
    }
    cout << endl;

输出结果:
这里写图片描述
可以看到,push进去的值顺序为1,5,10,8; 根据输出结果可以看出,数字大的优先级较高(less(left, right) left

//自定义的仿函数模板  ,与默认的less相反
template<typename T>
class MyRule
{
public:
    bool operator()(const T& _left, const T&_right){ return _left > _right; }
};

void Test()
{
    priority_queue<int, vector<int>,MyRule<int>> pquMyRule;  //自定义的优先级规则,第二个模板参数为底层容器
    pquMyRule.push(1);
    pquMyRule.push(5);
    pquMyRule.push(10);
    pquMyRule.push(8);  //同样的输入顺序
    while (!pquMyRule.empty())
    {
        cout << pquMyRule.top() << " ";
        pquMyRule.pop();
    }
    cout << endl;
}

代码运行结果:
这里写图片描述
第一行为默认优先级结果,第二行输出为自定义优先级结果。

适配器容器比较简单,但是应用并不少,优先级队列经常用于做消息队列。栈用于表达式求值等,

版权声明:本文为博主原创文章,未经博主允许不得转载。

STL学习系列之六—容器适配器

STL学习系列之六—容器适配器 STL提供了三种容器适配器:stack,queue,priority_queue。 适配器并不是第一类容器,因为它们并没有提供与元素的保存形式有关的真正数据结构实现...

C++ Primer 学习笔记_33_STL实践与分析(7) --容器适配器

 STL实践与分析 --容器适配器 引: 除了顺序容器,标准库还提供了三种顺序容器适配器:queue,priority_queue和stack,适配器是标准库中的概念,...

STL学习——STL中的序列式容器及适配器总结(vector、list、deque、stack、queue)

所谓序列式容器、其中的元素都可序,但未必有序。STL提供了vector,list,deque,stack,queue,priority-queue等等序列式容器。其中stack和queue由于只是将d...

STL 笔记(三) 容器适配器 stack、queue、priority_queue

栈 stack 是一种先进后出的(First In Last Out, FILO)的数据结构。在 STL中,其底层容器默认使用的是 deque, 也可以自己指定用 vector 或 list容器,然后...

STL_顺序容器、适配器、迭代器

顺序容器类型

C++ STL 容器适配器

除了顺序容器,标准库还提供了三种顺序容器适配器:queue/priority_queue和stack 适配器需包含相关头文件 #include #include 栈适配器...

STL之容器适配器queue的实现框架

对于接触过数据结构的人来说,队列并不陌生,它是一种FIFO(first in first out)的数据结构。与栈相比,队列的不同之处在于:(1)队列是一种先进先出的数据结构,而栈则是一种后进先出的数...
  • JXH_123
  • JXH_123
  • 2014年06月25日 13:38
  • 939

从零开始学C++之STL(十一):容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例

一、容器适配器 stack queue priority_queue stack、queue、priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector...

初探STL之容器适配器

容器适配器   用某种顺序容器来实现
  • wxwd1
  • wxwd1
  • 2014年07月10日 13:20
  • 1119

STL容器适配器:stack

1. 概念 stack是一种LIFO(last-in first-out)的数据结构,其只允许在容器的尾部对数据进行操作,如下: stack定义如下: Stacks are a...
  • yfkiss
  • yfkiss
  • 2011年06月21日 23:17
  • 2560
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【STL学习】容器篇-适配器容器
举报原因:
原因补充:

(最多只允许输入30个字)