STL 队列 queue 类成员函数如下:
back():返回最后一个元素
front():返回第一个元素
pop():删除第一个元素,void类型函数,没有返回值,头指针向后移动
push():在末尾加入一个元素,尾指针向后移动
empty():如果队列为空,则返回1,否则返回0,返回值为bool
size():返回队列中元素的个数,返回值类型为unsigned int
由于没有clear()方法,可以通过赋空队列queue< datatype >()的方法清空一个队列
#include<iostream>
#include<queue>
using namespace std;
int main(){
queue<int> q;
q.push(111);
q.push(222);
cout<<"队列大小:"<<q.size()<<endl;
cout<<"队首地址"<<&(q.front())<<endl;
cout<<"队尾地址"<<&(q.back())<<endl;
q.pop();
cout<<"移除111后"<<endl;
cout<<"队列空吗?"<<q.empty()<<endl;
cout<<"队首地址"<<&(q.front())<<endl;
cout<<"队尾地址"<<&(q.back())<<endl;
//检查删除操作是否只是头指针移动,而元素还在
if(*(&(q.front())-1) != 111){
cout<<"已经移除111"<<endl;
}else{
cout<<*(&(q.front())-1)<<endl;
}
q.pop();
cout<<"移除222后"<<endl;
cout<<"队列空吗?"<<q.empty()<<endl;
cout<<"队首地址"<<&(q.front())<<endl;
cout<<"队尾地址"<<&(q.back())<<endl;
return 0;
}
由运行结果可知,删除操作执行后只是头指针front移动,而内存地址中的元素111还在,依然可以访问到。
当队列中只剩一个元素时,front指针和back指针指向同一内存空间。
当empty()返回1时,表示队列已经没有元素了,front指针在back指针后面。
遍历队列
#include<iostream>
#include<queue>
using namespace std;
int main(){
queue<int> q;
q.push(111);
q.push(222);
q.push(333);
q.push(444);
q.push(555);
//由于queue没有支持的遍历元素的方法,没有迭代器
//故先记下头指针的地址,在往后遍历即可
for(int i=0; i<q.size(); i++){
cout<<*(&(q.front())+i)<<" ";
}
return 0;
}
运行结果: