STL学习网址:
- C语言中文网:http://c.biancheng.net/stl/
STL中的queue队列容器
队列是一种数据结构,具备队头和队尾。常见的有FIFO(先入先出)队列等。
常用函数
//(1)构造函数
queue(class T, class Container=deque<T>);//创建元素类型为T的空队列,默认容器是 deque
stack(class T, class Container=deque<T>);//创建元素类型为T的空堆栈,默认容器是deque
//(2)操作函数
//队列和堆栈共有函数:
bool empty(); //如果队列(堆栈)为空返回true, 否则返回false
int size(); //返回队列(堆栈)中元素数量
void push(const T& t); //把t元素压入队尾(栈顶)
void pop(); //当队列(栈)非空情况下,删除队头(栈顶)元素
//队列独有函数:
T& front(); //当队列非空情况下,返回队头元素引用
T& back(); //当队列非空情况下,返回队尾元素引用
//堆栈独有函数:
T& top(); //当栈非空情况下,返回栈顶元素的应用
#include <queue>
void main()
{
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
cout << "对头元素" << q.front() <<endl;
cout << "队列的大小 " << q.size() <<endl;
while (!q.empty()) {
int tmp = q.front();
cout << tmp << " ";
q.pop();
}
}
赋值数据类型:
class Teacher
{
public:
int age;
char name[32];
void printT()
{
cout << "age :" << age <<endl;
}
}
void main()
{
Teacher t1,t2,t3;
t1.age = 31;
t2.age = 32;
t3.age = 33;
queue<Teacher > q;
q.push(t1);
q.push(t2);
q.push(t3);
while (!q.empty()) {
Teacher tmp = q.front();
tmp.printT();
q.pop();
}
}
容器适配器
能成为queue基本容器类Container的条件是它应当支持size,empty,push_back,pop_front,front,back方法,可对数据的两端分别进行插入、删除操作,而deque、list都具有这些函数,所以它们可成为queue的基本容器类Container;
能成为stack基本容器类Container的条件是它应当支持size,empty,push_back, pop_back,back方法,可对数据的一端进行插入、删除操作,而deque、list、vector都具有这些函数,所以它们可成为stack的基本容器类Container。
注意:vector不能作为queue的基本容器类,因为vector没有pop_front方法。
Queue基本函数操作示例
#include <string>
#include <list>
#include <deque>
#include <queue>
using namespace std;
template <class T, class Container>//队列遍历模板函数
void PrintQueue(queue<T, Container > obj)
{
while(!obj.empty())
{
cout << obj.front() << "\t";
obj.pop();
}
}
void main()
{
string str = "a"; //字符串队列
queue<string, deque<string> > t;
for(int i=0; i<4; i++)
{
t.push(str);
str += "a";
}
PrintQueue(t); //a aa aaa aaaa
cout << endl;
queue<float, list<float> > u;//符点队列
for(i=0; i<4; i++)
{
u.push(i+1);
}
PrintQueue(u); //1 2 3 4
}