FIFO队列
队列是一种容器适配器,专门设计用于在FIFO上下文(先进先出)中操作,在该上下文中,元素插入到容器的一端,并从另一端提取。

队列被实现为容器适配器,它们是使用特定容器类的封装对象作为其基础容器的类,提供了一组特定的成员函数来访问其元素。 元素被推入特定容器的“后部”,并从其“前部”弹出。

基础容器可以是标准容器类模板或某些其他专门设计的容器类之一。 此基础容器应至少支持以下操作:

  • empty
  • size
  • front
  • back
  • push_back
  • pop_front

标准容器类双端队列和列表满足这些要求。 默认情况下,如果没有为特定的队列类实例指定容器类,则使用标准容器双端队列。

std::queue::empty

函数原型:

bool empty() const;

测试容器是否为空

返回队列是否为空:即队列大小是否为零。

该成员函数有效地将成员清空底层容器对象。

参数:

返回值:
如果基础容器的大小为0,则为true,否则为false。


std::queue::size

函数原型:

size_type size() const;

返回大小

返回队列中的元素数。

该成员函数有效地调用基础容器对象的成员大小。

参数:

返回值:
基础容器中的元素数。

成员类型size_type是无符号整数类型。


std::queue::front

函数原型:

      reference& front();
const_reference& front() const;

访问队首

返回对队列中下一个元素的引用。

下一个元素是队列中“最旧的”元素,是调用queue :: pop时从队列中弹出的元素。

该成员函数有效地调用基础容器对象的成员前端。

参数:

返回值:
对队列中队首的引用。


std::queue::back

函数原型:

      reference& back();
const_reference& back() const;

访问最后一个元素

返回对队列中最后一个元素的引用。 这是队列中的“最新”元素(即,最后一个被推入队列的元素)。

该成员函数有效地将成员调用回基础容器对象。

参数:

返回值:
对队列中最后一个元素的引用。


std::queue::push

函数原型:

void push (const value_type& val);
void push (value_type&& val);

插入元素

在队列的最后一个当前元素之后插入一个新元素。 此新元素的内容初始化为val。

该成员函数有效地调用基础容器对象的成员函数push_back。

参数:
val:
插入的元素初始化为的值。

成员类型value_type是容器中元素的类型(定义为第一类模板参数T的别名)。

返回值:
none


std::queue::emplace(C++11)

函数原型:

template <class... Args> void emplace (Args&&... args);

构造并插入元素

在队列的最后一个当前元素之后添加一个新元素。 这个新元素通过传递args作为其构造函数的参数而就地构造。

该成员函数有效地调用基础容器的成员函数emplace_back,转发args。

参数:
args:
需要构造新元素的参数

返回值:
none


std::queue::pop

函数原型:

void pop();

删除下一个元素
删除队列中的队首,有效地将其大小减小一个。

删除的元素是队列中“最旧的”元素,可以通过调用成员queue :: front检索其值。

这将调用已删除元素的析构函数。

该成员函数有效地调用基础容器对象的成员函数pop_front。

参数:

返回值:


std::queue::swap(C++11)

函数原型:

void swap (queue& x) noexcept(/*see below*/);

交换内容

用x交换容器适配器(* this)的内容。

该成员函数调用非成员函数swap(不合格)来交换基础容器。

noexcept说明符与基础容器上的交换操作匹配。

参数:
x:
另一个相同类型的队列容器适配器(即,使用相同的模板参数T和Container实例化)。 大小可能会有所不同。

返回值:


#pragma warning(disable:4786)
#include <iostream>
#include <queue>
#include <string>
#include <list>
#include <assert.h>

using namespace std;

void main43()
{
	 queue<string,list<string> > q1;
	 q1.push("苹果");
	 cout<<"\"苹果\" 被放入队列  "<<endl;
	 q1.push("香蕉");
	 cout<<"\"香蕉\" 被放入队列  "<<endl;
 	 q1.push("梨子");
	 cout<<"\"梨子\" 被放入队列  "<<endl;
	 q1.push("西瓜");
	 cout<<"\"西瓜\" 被放入队列  "<<endl;

	 assert(q1.size()==4);
	 assert(q1.front()=="苹果") ;

	 cout<<"将元素从队首依次取出"<<endl;
	 while(q1.size())
	 {	 
		 cout<<"  "<<q1.front()<<endl;
		 q1.pop();
	 }
}

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐