GESP 六级 · GESP 六级样题(C++ 组) 第 9 题

选择题 · 答案 D · 考点:队列(queue)

← 整套速查表 GESP 六级 全部真题

题目

有关下面 C++代码的说法,正确的是( )。 ![](https://cdn.luogu.com.cn/upload/image_hosting/avug2wkf.png)

答案:D

考点

队列(queue) 讲解 →队列(queue) 真题汇总 →

解题思维

这题考的是队列(queue)的容量限制和空队列检查,核心在于 pop 里的 assert 断言。拿到题先看 moreData 类定义,tail<5 限制入队,head<tail 限制出队。连续 push 没问题,但第三次 pop 时队列为空,assert 会触发,程序直接终止,不会执行后面的 cout。

常见错误

很多学生看到 push 返回*this 就以为链式调用一定合法,忽略了 pop 里的断言。还有人会误以为队列只要不越界就能无限 pop,忘了空队列时 head==tail,此时 assert(head<tail) 必假。最容易被骗的是选项 C,前两次 pop 确实能输出 4 和 5,但最后一次 pop 会触发 assert,程序直接结束,根本不会运行到最后一个 cout。

详细解析(节选)

考点:队列(queue)的容量上限与空队列检查

1. 命题视角:为什么考这个?

命题人把这道题放在 GESP 六级数据结构模块,就是要卡住那些以为“队列=数组”就能写代码的考生。真正的队列必须同时满足容量上限(防止越界)和空队列检查(防止非法出队)。这道题的陷阱就在于:push 的尾检查很直观,但 pop 里的 assert(head < tail) 才是真正决定程序生死的地方。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断