#include <cstdio>
#include <queue> /*队列queue头文件*/
#include <algorithm>
using namespace std;
void print( queue<int> a, int n ); //自定义遍历输出函数
void is_empty( queue<int> d );
void clear( queue<int> &q ); //自定义清空函数
int main()
{
queue <int> q; //定义一个队列,默认deque双端队列类型*/
int number;
int i, j, k, n;
scanf("%d", &n ); //下一行输入n个数
for( i=0; i<n; i++ ){
scanf("%d", &number );
q.push( number ); /*压入元素至队列的队尾*/
}
print( q, q.size() ); /*遍历输出队列 不会改变主函数里的队列*/
q.pop(); /*弹出队列的第一个元素 且不返回被弹出元素的值*/
q.pop();
print( q, q.size() );
printf("%d\n", q.front() ); /*访问第一个队列元素并输出*/
printf("%d\n", q.back() ); /*访问队列的最后一个元素并输出*/
printf("%d\n", q.size() ); /*返回队列的大小并输出*/
q = queue<int> (); /*用空队列赋值,清空队列*/
while( !q.empty() ) q.pop(); /*逐个弹出,清空队列*/
clear( q ); /*自定义clear()函数,清空队列, 最高效的方法*/
is_empty( q ); /*判断是否为空队列*/
return 0;
}
void print( queue<int> a, int n ) /*不会改变主函数里的队列*/
{
int i;
for( i=0; i<n; i++ ){
printf("%d ", a.front() );
a.pop(); /*主函数的队列不被影响*/
}
printf("\n");
}
void is_empty( queue<int> d )
{
if( d.empty() )
printf("0\n"); /*判断队列是否为空*/
else
printf("1\n");
}
void clear( queue<int> &q ) //定义这样的形参会改变主函数里的队列*/
{
queue<int> empty;
swap( empty, q ); //清空主函数里的队列
}