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

来源:互联网 发布:南京java工资一般多少 编辑:程序博客网 时间:2024/05/18 19:36

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;}

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

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

0 0
原创粉丝点击