这篇主要讲一下适配器容器
1.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; //会对入队的元素从小到大排列 |