首页 > 编程语言 >【C++】STL 容器 - queue 队列容器 ( queue 容器简介 | queue 容器特点 | push 函数 | pop 函数 | front 函数 )

【C++】STL 容器 - queue 队列容器 ( queue 容器简介 | queue 容器特点 | push 函数 | pop 函数 | front 函数 )

时间:2024-01-02 12:04:57浏览次数:38  
标签:容器 函数 删除 队列 元素 queue



文章目录

  • 一、 queue 队列容器简介
  • 1、queue 队列容器引入
  • 2、queue 队列容器特点
  • 二、 queue 队列常用 api 函数
  • 1、队尾插入函数 - queue#push 函数
  • 2、队头删除函数 - queue#pop 函数
  • 3、获取队首元素 - queue#front 函数








一、 queue 队列容器简介



1、queue 队列容器引入



queue 队列容器 是 先进先出 ( FIFO , First In First Out ) 容器 ;

  • 该容器只允许在 " 队尾 " 进行插入操作 , 而在 " 队首 " 进行删除操作 ;
  • 该容器两边开口 , 一边用于插入元素 ( 不能删除 ) , 一边用于删除元素 ( 不能插入 ) ;

stack 堆栈容器 是 一边开口 , 也就是 栈顶开口 , 栈顶可以 添加 / 删除 元素 , 栈底 不能进行操作 ;



2、queue 队列容器特点



queue 队列容器 的 插入 / 删除 元素操作 时间复杂度是 O(1) ;

queue 队列容器 提供的 api 成员函数 与 stack 堆栈容器 类似 , 只提供有限的成员函数 , 如 :

  • queue#push 函数 : 队尾 插入元素 ;
  • queue#pop 函数 : 队首 删除元素 ;
  • queue#front 函数 : 查看 队首元素 ;


使用 queue 容器之前 , 需要导入 <queue> 头文件 ;

#include <queue>






二、 queue 队列常用 api 函数



1、队尾插入函数 - queue#push 函数



调用 queue 容器的 push 函数 可以 在队尾插入一个元素 ;

queue#push 函数原型如下 :

void push(const value_type& val);

queue#push 函数 接受一个常量引用参数 val , 将 val 元素插入队列的尾部 , 并触发底层容器的相应操作 , 如 : 分配内存等 ;

queue 容器 的元素插入删除位置限定 :

  • 队尾 只能插入元素 , 不能删除元素 ;
  • 队头 只能插入元素 , 不能删除元素 ;
  • 队列中部 既不能插入元素 , 也不能删除元素 ;


代码示例 :

#include "iostream"
using namespace std;
#include "queue"

int main() {

    std::queue<int> q;

    // 队尾入队操作  
    q.push(10);

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

【C++】STL 容器 - queue 队列容器 ( queue 容器简介 | queue 容器特点 | push 函数 | pop 函数 | front 函数 )_开发语言



2、队头删除函数 - queue#pop 函数



调用 queue 队列容器的 pop 函数 , 可以删除 队头的元素 ;

queue#pop 函数原型如下 :

void pop();

queue#pop 函数 没有 参数 和 返回值 , 直接将 队首元素 直接删除 , 也无法获取到队首元素 ;

使用 queue#pop 函数 删除队首元素前 , 先检查 queue 队列是否为空 , 如果为空 , 强行删除队首元素会导致程序崩溃 ;



queue 容器 的元素插入删除位置限定 :

  • 队尾 只能插入元素 , 不能删除元素 ;
  • 队头 只能插入元素 , 不能删除元素 ;
  • 队列中部 既不能插入元素 , 也不能删除元素 ;


代码示例 :

#include "iostream"
using namespace std;
#include "queue"

int main() {

    std::queue<int> q;

	// 删除队首元素
	// 如果 queue 为空, 程序崩溃
	//q.pop();

    // 队尾插入元素  
    q.push(10);

	// 删除队首元素
	q.pop();

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

【C++】STL 容器 - queue 队列容器 ( queue 容器简介 | queue 容器特点 | push 函数 | pop 函数 | front 函数 )_STL_02

空的 queue 队列 删除队首元素 , 会导致如下运行时异常崩溃 ;

【C++】STL 容器 - queue 队列容器 ( queue 容器简介 | queue 容器特点 | push 函数 | pop 函数 | front 函数 )_c++_03



3、获取队首元素 - queue#front 函数



调用 queue 队列的 front 函数 , 可以获取队首元素 , 该元素不会再队列中被删除 , 只是将值读取出来 ;

queue#front 函数原型 :

const_reference front() const;

queue#front 函数 没有参数 , 返回值是一个常量引用 , 表示读取的队列的头部元素 ;

如果 queue 队列为空 , 调用 front 函数会导致未定义行为 , 程序直接崩溃 ; 在使用 front 函数之前 , 通常需要先检查队列是否为空 , 可以使用 empty 函数来实现 ;



代码示例 :

#include "iostream"
using namespace std;
#include "queue"

int main() {

    std::queue<int> q;

	// 删除队首元素
	// 如果 queue 为空, 程序崩溃
	//q.pop();

	// 获取队首元素
	// 如果 queue 为空, 程序崩溃
	//q.front();

    // 队尾插入元素  
    q.push(1);
    q.push(2);

	// 打印队首元素
	cout << "队首元素 : " << q.front() << endl;

	// 删除队首元素
	q.pop();

	// 打印队首元素
	cout << "队首元素 : " << q.front() << endl;

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

【C++】STL 容器 - queue 队列容器 ( queue 容器简介 | queue 容器特点 | push 函数 | pop 函数 | front 函数 )_开发语言_04

如果 queue 队列为空 , 会导致如下崩溃问题 :

【C++】STL 容器 - queue 队列容器 ( queue 容器简介 | queue 容器特点 | push 函数 | pop 函数 | front 函数 )_push函数_05


标签:容器,函数,删除,队列,元素,queue
From: https://blog.51cto.com/u_14202100/9066917

相关文章

  • 【C++】STL 容器 - stack 堆栈容器 ① ( stack 堆栈容器特点 | stack 堆栈容器与 dequ
    文章目录一、stack堆栈容器简介1、stack堆栈容器引入2、stack堆栈容器特点3、stack堆栈容器与deque双端数组容器对比二、代码示例-stack堆栈容器简单示例1、代码示例2、执行结果一、stack堆栈容器简介1、stack堆栈容器引入C++语言中的STL标准模板库中的stac......
  • 使用容器快速在阿里云 ECS 多节点上搭建 Citus 12.1 集群
    阿里云ECS机器节点这里我们使用两台同一区域的ECS机器。机器配置:2核2G。(ps:阿里云99元一年的活动)一台安装coordinator(协调器),这里内网IP为172.18.60.11一台安装worker,这里内网IP为172.18.60.12操作系统两台机器分别安装了厂商的AlibabaCloudLinux3系统......
  • 无涯教程-Java 正则 - \p{XDigit}匹配函数
    字符类\p{XDigit}匹配任何十六进制字符。p{XDigit}-示例下面的示例显示Posix字符类匹配的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPosixCharacterClassDemo{privatestaticfinalStringREGEX......
  • 无涯教程-Java 正则 - \p{Print}匹配函数
    字符类\p{Print}与任何可打印字符匹配。p{Print}-示例下面的示例显示Posix字符类匹配的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPosixCharacterClassDemo{privatestaticfinalStringREGEX=......
  • 无涯教程-Java 正则 - \p{Graph}匹配函数
    字符类\p{Graph}与任何可见字符匹配。p{Graph}-示例下面的示例显示Posix字符类匹配的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPosixCharacterClassDemo{privatestaticfinalStringREGEX="......
  • 无涯教程-Java 正则 - \p{Punct}匹配函数
    字符类\p{Punct}与任何标点字符匹配。p{Punct}-示例下面的示例显示Posix字符类匹配的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPosixCharacterClassDemo{privatestaticfinalStringREGEX="......
  • 无涯教程-Java 正则 - \p{Alnum}匹配函数
    字符类\p{Alnum}与任何字母数字字符匹配。p{Alnum}-示例下面的示例显示Posix字符类匹配的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPosixCharacterClassDemo{privatestaticfinalStringREGEX......
  • python学习笔记6(基本数据类型2、数据类型之间的转换、eval()函数)
    (一)基本数据类型21、字符串的索引和切片索引,查找某个字符,包括正向和反向索引,正向从0开始,负向从-1开始s='hello'print(s[0])print(s[-5])切片,字符串中了串检索,注意下面的输出是he,也就是第二个参数是不包含参数,正向反向规则一样,n或m可以节省s='hello'print(s[0:2])2、字符串类型xn或......
  • 无涯教程-Java 正则 - \p{Lower}匹配函数
    字符类\p{Lower}与任何小写字符匹配。p{Lower}-示例下面的示例显示Posix字符类匹配的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPosixCharacterClassDemo{privatestaticfinalStringREGEX="......
  • 无涯教程-Java 正则 - \p{Digit}匹配函数
    字符类\p{Digit}匹配任何数字。p{Digit}-示例下面的示例显示Posix字符类匹配的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPosixCharacterClassDemo{privatestaticfinalStringREGEX="\\p{Di......