网站设计需要什么软件网站关键词设置几个
2026/1/25 21:29:39 网站建设 项目流程
网站设计需要什么软件,网站关键词设置几个,网站移动端是什么问题,医药公司网站建设C从入门到实战#xff08;二十三#xff09;queue的介绍和使用前言一、什么是queue1.1 queue的定义1.2 queue的核心特性二、queue的核心接口详解2.1 构造函数#xff1a;queue()2.2 判空操作#xff1a;empty()2.3 大小获取#xff1a;size()2.4 队头访问#xff1a;fron…C从入门到实战二十三queue的介绍和使用前言一、什么是queue1.1 queue的定义1.2 queue的核心特性二、queue的核心接口详解2.1 构造函数queue()2.2 判空操作empty()2.3 大小获取size()2.4 队头访问front()2.5 队尾访问back()2.6 入队操作push()2.7 出队操作pop()三、queue的综合使用示例四、queue与stack的对比前言在上一篇博客中我们学习了stack——遵循后进先出LIFO规则的容器适配器仅支持栈顶的插入、删除与访问操作本篇将聚焦另一种容器适配器——queue队列它和stack同属适配器容器但核心规则是先进先出FIFO仅支持从队尾插入元素、从队头删除/访问元素同样是基于底层序列容器封装的轻量级工具我们将从queue的核心特性入手详解它的定义、底层要求、常用接口的使用方法并结合示例说明其典型应用场景帮你掌握队列的核心使用技巧。我的个人主页欢迎来阅读我的其他文章https://blog.csdn.net/2402_83322742?spm1011.2415.3001.5343我的C知识文章专栏欢迎来阅读指出不足https://blog.csdn.net/2402_83322742/category_12880513.html?spm1001.2014.3001.5482C官方queue文档https://cplusplus.com/reference/queue/queue/一、什么是queue1.1 queue的定义队列是一种容器适配器专门用于在FIFO先进先出First In First Out的场景下操作只能从容器的一端插入元素从另一端提取元素。队列作为容器适配器实现容器适配器的本质是封装一个特定的容器作为底层容器queue只会对外提供符合队列规则的成员函数来访问元素元素从队尾完成入队操作从队头完成出队操作无法访问队列中间的元素。能够作为queue底层容器的类需要至少支持以下操作empty检测容器是否为空size返回容器中有效元素的个数front返回容器首元素的引用back返回容器尾元素的引用push_back在容器尾部插入元素pop_front在容器头部删除元素STL中的标准容器deque和list都满足这些要求。默认情况下如果实例化queue时没有指定底层容器会自动使用标准容器deque。1.2 queue的核心特性单向操作限制仅能操作队头和队尾无法访问/修改队列中间的元素也不支持迭代器遍历适配器特性仅做接口封装无额外内存开销性能完全依赖底层容器FIFO严格规则先入队的元素一定会先出队和现实中的“排队”逻辑完全一致。二、queue的核心接口详解queue的接口和stack一样非常精简仅包含构造、判空、大小、队头/队尾访问、入队、出队这几个核心接口2.1 构造函数queue()语法queueTq;// T为存储的元素类型默认底层容器为deque// 或指定底层容器queueT, Container q;作用创建一个空的队列底层容器会执行默认初始化。示例#includequeue#includeiostream#includelistusingnamespacestd;intmain(){// 1. 默认构造底层容器为dequequeueintq1;// 2. 指定底层容器为listqueueint,listintq2;coutq1是否为空q1.empty()endl;// 输出1truereturn0;}2.2 判空操作empty()语法boolempty()const;作用检测队列是否为空为空返回true否则返回false时间复杂度O(1)。示例queueintq;coutq.empty()endl;// 空队列输出1trueq.push(10);coutq.empty()endl;// 非空队列输出0false2.3 大小获取size()语法size_tsize()const;作用返回队列中有效元素的个数返回值为无符号整数size_t。示例queueintq;q.push(1);q.push(2);q.push(3);cout队列的大小q.size()endl;// 输出32.4 队头访问front()语法// 普通版本返回队头元素的引用可修改Tfront();// const版本返回队头元素的const引用只读constTfront()const;作用返回队列中第一个入队元素的引用空队列调用front()会导致未定义行为。示例queueintq;q.push(10);q.push(20);// 普通版本修改队头元素q.front()100;cout队头元素q.front()endl;// 输出100// const版本仅能读取constqueueintcq(q);coutconst队列的队头元素cq.front()endl;// 输出100// cq.front() 200; // 错误const引用无法修改元素2.5 队尾访问back()语法// 普通版本返回队尾元素的引用可修改Tback();// const版本返回队尾元素的const引用只读constTback()const;作用返回队列中最后一个入队元素的引用空队列调用back()会导致未定义行为。示例queueintq;q.push(10);q.push(20);// 普通版本修改队尾元素q.back()200;cout队尾元素q.back()endl;// 输出2002.6 入队操作push()语法// 拷贝入队将val拷贝到队尾voidpush(constTval);// 原地构造C11直接在队尾构造元素避免拷贝templateclass...Argsvoidemplace(Args...args);作用将元素添加到队尾底层调用底层容器的push_back()接口。示例queueintq;// 拷贝入队q.push(1);q.push(2);// 原地构造入队效果等同于push(3)但效率更高q.emplace(3);cout队尾元素q.back()endl;// 输出32.7 出队操作pop()语法voidpop();作用删除队头的元素仅执行删除操作不会返回元素底层调用底层容器的pop_front()接口空队列调用pop()会导致未定义行为。示例queueintq;q.push(1);q.push(2);q.push(3);cout出队前队头q.front()endl;// 输出1q.pop();// 删除队头元素1cout出队后队头q.front()endl;// 输出2cout出队后队列大小q.size()endl;// 输出2三、queue的综合使用示例queue没有迭代器无法直接遍历如果需要遍历队列需要借助临时队列暂存元素遍历完成后可以选择恢复原队列#includequeue#includeiostreamusingnamespacestd;intmain(){// 1. 初始化队列并入队元素queueintq;q.push(10);q.push(20);q.push(30);q.push(40);// 2. 队列的基本属性cout队列是否为空q.empty()endl;// 输出0cout队列的大小q.size()endl;// 输出4cout队头元素q.front()endl;// 输出10cout队尾元素q.back()endl;// 输出40// 3. 模拟遍历队列借助临时队列queueinttemp;cout队列的元素队头到队尾;while(!q.empty()){intvalq.front();coutval ;// 输出10 20 30 40temp.push(val);q.pop();}coutendl;// 4. 恢复原队列while(!temp.empty()){q.push(temp.front());temp.pop();}cout恢复后队列大小q.size()endl;// 输出4return0;}四、queue与stack的对比对比维度queue队列stack栈核心规则先进先出FIFO后进先出LIFO操作位置队尾入队、队头出队栈顶入栈、栈顶出栈访问接口front()队头、back()队尾top()栈顶底层默认容器dequedeque遍历方式需借助临时队列需借助临时栈典型应用BFS、任务排队括号匹配、逆序处理我的个人主页欢迎来阅读我的其他文章https://blog.csdn.net/2402_83322742?spm1011.2415.3001.5343我的C知识文章专栏欢迎来阅读指出不足https://blog.csdn.net/2402_83322742/category_12880513.html?spm1001.2014.3001.5482非常感谢您的阅读喜欢的话记得三连哦

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询