C++标准模板库(STL)——(五)
本次介绍的是STL的容器适配器,标准模板库包含了三种容器适配器:stack(栈);queue(队列)和优先级队列(priority_queue)。容器适配器是通过序列式容器实现的,即容器适配器中保存的是容器,容器再存放相关元素。
一.Stack容器
1 .简介:
stack是堆栈容器,是一种“先进后出”的容器。
stack是简单地装饰deque容器而成为另外的一种容器。
#include<stack>
2. stack的对象的默认构造:
stack采用模板类实现, stack对象的默认构造形式: stack <T>stkT;
stack <int> stkInt; //一个存放int的stack容器。
stack <float> stkFloat; //一个存放float的stack容器。
stack <string> stkString; //一个存放string的stack容器。
...
//尖括号内还可以设置指针类型或自定义类型。
3 . stack的push()和pop()操作:
stack.push(elem); //往栈头添加元素
stack.pop(); //从栈头移除第一个元素
stack<int> stkInt;
stkInt.push(1);stkInt.push(3);stkInt.pop();
stkInt.push(5);stkInt.push(7);
stkInt.push(9);stkInt.pop();
stkInt.pop();
此时stkInt存放的元素是1,5
4. stack 的拷贝构造和赋值:
stack(const stack&stk); //拷贝构造函数
stack& operator=(const stack &stk); //重载等号操作符
stack<int>stkIntA;
stkIntA.push(1);
stkIntA.push(3);
stkIntA.push(5);
stkIntA.push(7);
stkIntA.push(9);
stack<int>stkIntB(stkIntA); //拷贝构造
stack<int>stkIntC;
stkIntC= stkIntA; //赋值
5 . stack的数据存取:
stack.top(); //返回最后一个压入栈元素
stack<int>stkIntA;
stkIntA.push(1);
stkIntA.push(3);
stkIntA.push(5);
stkIntA.push(7);
stkIntA.push(9);
intiTop = stkIntA.top(); //9
stkIntA.top()= 19; //19
6 . stack 的大小:
stack.empty(); //判断堆栈是否为空
stack.size(); //返回堆栈的大小
stack<int>stkIntA;
stkIntA.push(1);
stkIntA.push(3);
stkIntA.push(5);
stkIntA.push(7);
stkIntA.push(9);
if(!stkIntA.empty())
{
intiSize = stkIntA.size(); //5
}
7 . 参考程序:
本程序是一个计算器;正是通过栈的特性来实现,可带括号的四则运算都可以.
8 .运行结果:
二:queue容器:
1 . 简介:
queue是队列容器,是一种“先进先出”的容器。
queue是简单地装饰deque容器而成为另外的一种容器。
#include<queue>
2. queue 对象的默认构造:
queue采用模板类实现,queue对象的默认构造形式:queue<T> queT; 如:
queue<int> queInt; //一个存放int的queue容器。
queue<float> queFloat; //一个存放float的queue容器。
queue<string> queString; //一个存放string的queue容器。
...
//尖括号内还可以设置指针类型或自定义类型。
3 . queue 的push()和pop()的使用方法:
queue.push(elem); //往队尾添加元素
queue.pop(); //从队头移除第一个元素
queue<int> queInt;
queInt.push(1);queInt.push(3);
queInt.push(5);queInt.push(7);
queInt.push(9);queInt.pop();
queInt.pop();
此时queInt存放的元素是5,7,9
4 . queue 的数据存取:
queue.back(); //返回最后一个元素
queue.front(); //返回第一个元素
queue<int>queIntA;
queIntA.push(1);
queIntA.push(3);
queIntA.push(5);
queIntA.push(7);
queIntA.push(9);
intiFront = queIntA.front(); //1
intiBack = queIntA.back(); //9
queIntA.front()= 11; //11
queIntA.back()= 19; //19
5 . queue 的大小:
queue.empty(); //判断队列是否为空
queue.size(); //返回队列的大小
queue<int>queIntA;
queIntA.push(1);
queIntA.push(3);
queIntA.push(5);
queIntA.push(7);
queIntA.push(9);
if(!queIntA.empty())
{
intiSize = queIntA.size(); //5
}
6 . 参考程序:
7 . 运行结果:
三:priority_queue容器:
1 .简介:
最大值优先级队列、最小值优先级队列
优先级队列适配器 STL priority_queue
用来开发一些特殊的应用,请对stl的类库,多做扩展性学习
priority_queue<int,deque<int>> pq;
priority_queue<int,vector<int>> pq;
pq.empty()
pq.size()
pq.top()
pq.pop()
pq.push(item)
#include <iostream>
using namespace std;
#include "queue"
void main81()
{
priority_queue<int>p1; //默认是 最大值优先级队列
//priority_queue<int,vector<int>, less<int> > p1; //相当于这样写
priority_queue<int,vector<int>, greater<int>> p2; //最小值优先级队列
p1.push(33);
p1.push(11);
p1.push(55);
p1.push(22);
cout <<"队列大小" <<p1.size() << endl;
cout <<"队头" << p1.top()<< endl;
while (p1.size() > 0)
{
cout<< p1.top() << " ";
p1.pop();
}
cout << endl;
cout << "测试 最小值优先级队列" << endl;
p2.push(33);
p2.push(11);
p2.push(55);
p2.push(22);
while (p2.size() > 0)
{
cout<< p2.top() << " ";
p2.pop();
}
}
参考程序:
运行结果: