关闭

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

113人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8140次
    • 积分:285
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:4篇
    • 译文:0篇
    • 评论:11条
    文章分类
    最新评论