C++高级_Queue容器_STL标准模板库

Queue容器的简介

queue是队列容器,是一个“先进先出”的容器。

queue是简单的装饰deque容器而成为另外的一种容器。

需要添加头文件:#include <queue>

queue 与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类
型,元素类型是必要的,容器类型是可选的,默认为deque 类型。

queue队列也是一个线性存储表,与后进先出的堆栈不同,元素数据在表的一端插入,在另一端进行删除,即构成了先进先出FIFO表。插入的一端成为队尾,删除的一端成为队首。

C++ STL对queue队列的泛化,是通过模板类型,将默认的deque双端队列类型导入,在内部创建一个序列容器对象,来处理 queue队列的数据存储和操作,包括queue队列是否为空、取队首元素、取队尾元素、元素入队和元素出队等。由于仅需要取队首和队尾元素的操作,因此queue队列容器并不提供任何类型的迭代器。

5

queue的默认构造:

template <class T>
queue<T> zploo;       //queue采用模板类实现,queue对象的默认构造形式。
queue<int> zploo;     //一个存放int的queue容器。
queue<float> zploo;   //一个存放float的queue容器。
queue<string> zploo;  //一个存放string的queue容器。

/*尖括号内还可以设置指针类型 或 自定义类型*/

queue的拷贝构造和赋值:

queue(const queue& zploo);     //拷贝构造函数
queue& operator= (const queue &zploo);  //重载等号操作符

queue的push() 和 pop() 方法:

queue.push(elem);      //往队尾添加元素
queue.pop();           //从对头移除第一个元素

queue的数字存取:

queue.back();     //返回最后一个元素
queue.front();    //饭后第一个元素

queue的大小:

queue.empty();       //判断队列是否为空
queue.size();        //返回队列的大小

练习演示代码:

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>
#include <queue>
#include <string>

using namespace std;

class Student
{
public:
	Student(string name, int id) {
		this->name = name;
		this->id = id;
	}

	void show()
	{
		cout << name << ", " << id << endl;
	}

private:
	string name;
	int id;
};

void testQueue1()
{
	queue<int> q;

	q.push(1); //队头
	q.push(2);
	q.push(3);
	q.push(4);
	q.push(5); //队尾


	int value = q.front();
	q.pop();
	cout << value << "出队了" << endl;

	q.front() = 100;
	q.back() = 200;


	//遍历
	while (!q.empty()) {
		cout << q.front() << "出队了" << endl;
		q.pop();
	}


	Student s1("张2", 1);
	Student s2("张3", 2);
	Student s3("张4", 3);
	Student s4("张5", 4);

	queue<Student> qS;

	qS.push(s1);
	qS.push(s2);
	qS.push(s3);
	qS.push(s4); //入队

	while (!qS.empty()) {
		qS.front().show();
		qS.pop();
	}

	cout << " ----" << endl;

	queue<Student *> qSR;

	qSR.push(&s1);
	qSR.push(&s2);
	qSR.push(&s3);
	qSR.push(&s4);

	while (!qSR.empty()) {
		qSR.front()->show();
		qSR.pop();
	}

}

int main(void)
{
	testQueue1();
	return 0;
}

 

暂无评论

发表评论