C++队列的使用与介绍

本文介绍了队列的基本概念、在多线程数据传输和数据缓存中的应用,以及C++STL中queue的初始化、操作API和示例,展示了队列如何维护数据顺序并优化并发处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、队列的介绍

队列是C/C++中最基础的数据结构之一,队列本质上是一种线性表。它遵循着先进先出(fifo)的特点,在队列中一般在队尾插入,队头出队。这就相当于排队一样,刚入队的人需要排在队尾(rear),每次出队的都是在队首(front)。
在这里插入图片描述
从上面这张图我们可以看到,队尾入队了三个元素分别是1,2,3。1号数据最早入队、2号数据第二入队、3号数据最后入队。出队的时候,1号最早出队(pop1)、2号排在1号数据后面(pop2)、3号最后出队(pop3)。所以使用队列的时候,我们可以保证数据的顺序不会出现乱序的错误。

二、队列的用处
1、队列常用于多线程数据传输。

由于在大型的项目开发中,往往有许多线程同时运作。此时,许多线程之间需要进行数据的传递,所以此时我们就需要通过队列作为一条桥梁把数据从一个线程送到另外一个线程里面(如下图一就是队列在两个线程之间的通信)。线程一把数据按照顺序把数据包存储到Queue上、线程二、三也按照顺序从队列拿到数据。
在这里插入图片描述

2、队列常用于数据量缓存方面。

在音视频解码的时候,音视频数据会大量传入解码端。假设此时没有一个缓冲的时间,解码端可能会因为处理速度的问题,导致解码视频的时候会出现花屏、卡顿等问题。所以,此时我们就需要用队列进行缓冲,使其传输速度降下来,那解码端的解码压力就会大大降下来,此时解码出来的画面质量就会高很多。
在这里插入图片描述

三.C++ STL队列的用法
3.1、queue的初始化
#include <queue>
std::queue<object> object_queue; //这里的<object>里面的object是任意类型的数据,也包括结构体的数据。
3.2、queue的操作API
front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
push(const T& obj):在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
push(T&& obj):以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
pop():删除 queue 中的第一个元素。
size():返回 queue 中元素的个数。
empty():如果 queue 中没有元素的话,返回 trueemplace():用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。
swap(queue<T> &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。
3.3、实现demo事例
#include <stdio.h>
#include <queue>
using namespace std;
int main()
{
	queue<int> q;
	for(int i=0;i<6;i++)
	{
		q.push(i);//push(i)用来将 i压入队列,因此依次入队 012345
	}
	q.pop();// 出队首元素 0
	q.pop();// 出队首元素 1
	q.pop();// 出队首元素 2
	q.pop();//出队首元素 3
	printf("%d\n",q.front());
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值