STL常用容器归纳总结(4)

这篇主要讲一下适配器容器
1.stack(栈容器)

实现头文件:< stack>

概述:

它是一个栈类模板,和数据结构中的栈一样,具有后进先出的特点。栈容器默认的底层容器是deque。也可以指定其他底层容器。
例如,以下语句指定myst栈的底层容器为vector:

1
stack<string,vector<string> > myst;	//第2个参数指定底层容器为vector

主要成员函数:

  • empty():判断栈容器是否为空
  • size():返回栈容器中实际元素个数
  • push(elem):元素elem进栈
  • top():返回栈顶元素
  • pop():元素出栈

注意:stack容器没有begin()/end()和rbegin()/rend()这样的用于迭代器的成员函数。

演示代码:

#include<iostream>
#include <stack>
using namespace std;
int main()
{
    stack<int> st;
    st.push(1); 
    st.push(2); 
    st.push(3);
    printf("栈顶元素: %d\n", st.top());
    printf("出栈顺序: ");
    while (!st.empty())     //栈不空时出栈所有元素
    {
        printf("%d ", st.top());
        st.pop();
    }
    printf("\n");
    return 0;
}

输出:
栈顶元素: 3
出栈顺序: 3 2 1

2.queue(队列容器)

实现头文件:< queue>

概述:

它是一个队列类模板,和数据结构中的队列一样,具有先进先出的特点。不允许顺序遍历,没有begin()/end()和rbegin()/rend()这样的用于迭代器的成员函数。

主要成员函数:

  • empty():判断队列容器是否为空。
  • size():返回队列容器中实际元素个数。
  • front():返回队头元素。
  • back():返回队尾元素。
  • push(elem):元素elem进队。
  • pop():元素出队。

代码演示:

#include<iostream>
#include <queue>
using namespace std;
int main()
{
    queue<int> qu;
    qu.push(1); 
    qu.push(2); 
    qu.push(3);
    printf("队头元素: %d\n", qu.front());
    printf("队尾元素: %d\n", qu.back());
    printf("出队顺序: ");
    while (!qu.empty())        //出队所有元素
    {
        printf("%d ", qu.front());
        qu.pop();
    }
    printf("\n");
    return 0;
}

输出:
队头元素: 1
队尾元素: 3
出队顺序: 1 2 3

3.priority_queue(优先队列容器)

实现头文件:< queue>

概述:

它是一个优先队列类模板。优先队列是一种具有受限访问操作的存储结构,元素可以以任意顺序进入优先队列。一旦元素在优先队列容器中,出队操作将出队列最高优先级元素。
比如:对于 int 类型的元素,priority_queue 默认元素值越大越优先。

主要成员函数:

  • empty():判断优先队列容器是否为空。
  • size():返回优先队列容器中实际元素个数。
  • push(elem):元素elem进队。
  • top():获取队头元素。
  • pop():元素出队。

代码演示:

#include<iostream>
#include <queue>
using namespace std;
int main()
{
    priority_queue<int> qu;
    qu.push(3); 
    qu.push(1); 
    qu.push(2);
    printf("队头元素: %d\n", qu.top());
    printf("出队顺序: ");
    while (!qu.empty())        //出队所有元素
    {
        printf("%d ", qu.top());
        qu.pop();
    }
    printf("\n");
    return 0;
}

输出:
队头元素: 3
出队顺序: 3 2 1 (可见是按照值的大小出队)

注: 优先队列默认是自动的从大到小排列,想要让它从小到大排列,可以包含头文件 < functional>,再如下形式声明即可

1
priority_queue<int, vector<int>, greater<int> >q; //会对入队的元素从小到大排列
0%