浅谈STL之Queue

前言

这一系列文章是给像我一样的小白们使用的,也欢迎各位dalao指正错误。

这个系列预计要出五章,这一章是本系列的第二章。

非常感谢大家第一天的支持,以后我会更加努力。

浅谈STL之Vectoricon-default.png?t=N7T8https://blog.csdn.net/weixin_72238593/article/details/135745564?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170607696616800227434642%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=170607696616800227434642&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-3-135745564-null-null.142%5Ev99%5Econtrol&utm_term=%E6%B5%85%E8%B0%88STL&spm=1018.2226.3001.4187

STL中的Queue

Queue是一个被广泛使用的线性STL容器

1.Queue的特点

1.先进先出(FIFO),即先入队的元素会先出队,这样在处理数据时十分有优势,可以方便组织管理数据。

2.高效率:在处理大量数据时,Queue能够保证数据的有序性和高效性。同时,队列研究还具有可扩展性,可以根据需要添加新的操作,不会影响系统的性能。

3.队列的长度可以动态变化,可以根据需要进行调整,这和上一期的Vector非常相似反正STL都是这样。[1]

2.如何手写队列

看到这里,有些人就要问:为什么要手写队列?STL的Queue不香么?

主要原因是STL的Queue只能访问队头队尾,无法检测中间,所以用手写队列更灵活。

其实手写也不麻烦。

2.1准备工作

一个长度(大小)为M的数组(M越大越好,1e6左右),head,tail两个变量。

2.2基本操作

1.队列空

head = tail

2.队列满

tail = M

3.入队,记得要先检测一下是队列满不满

if(Queue_is_full()) cout<<"ERR:Queue is full";
else q[tail++] = x;

4.出队,要检测一下队是否空

if(Queue_is_empty()) cout<<"ERR";
else head++;

完整版:

#include
#define f(i,a,b) for(int i = a ; i<=b ; i++)
using namespace std;
#define MAX_SIZE 15
class Queue{
private:
    int q[MAX_SIZE];
    int head,tail;
public:
    Queue(){ head = -1,tail = -1;}
    void charu(int x){
    	//if(tail>MAX_SIZE-1) cout<<"ERR:Queue is full";
    	else{
    		if(head == -1) head++;
    		q[++tail]  = x;
		}
	}
    void deleteq(){
    	if(head == -1 || head>tail)cout<<"ERR:Queue is empty";
		else head++;
	}
    bool isEmpty(){return (head == -1 || head>tail);}
    void check_ele(){
    	f(i,1,5) cout<

其实还有循环队列,但是我不会写有点麻烦且没有多大必要。

3.Queue(STL)

1.前提,引入queue头文件。

2.声明一个队列:

queue q;//声明管理一个int类型的队列

3.常见操作:

q.empty()//如果队列为空返回TRUE,否则返回false
q.size()//返回队列中元素的个数
q.pop()//弹出队首元素
q.front()//返回队首元素的值
q.push(x)//在队尾压入新元素x
q.back()//返回队尾元素的值

这就是本期的全部内容了,喜欢的请一键三连哦~~

参考

[1] 搜索智能精选 (baidu.com)

你可能感兴趣的:(STL,c++,数据结构,算法)