GESP 六级 · GESP 202409 C++ 六级 第 5 题

选择题 · 答案 B

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

题目

下面代码判断队列的第一个元素是否等于 $a$,并删除该元素,横向上应填写( )。

#include <iostream>
#include <queue>

using namespace std;

bool is_front_equal(std::queue<int>& q, int a) {
    bool is_equal = false;
    if (!q.empty()) {
        ________________________  // 在此处填入代码
    }
    return is_equal;
}
答案:B

解题思维

逻辑代数运算:与(∧/×)、或(∨/+)、非(┐/¬)。德摩根律:┐(A∧B)=┐A∨┐B,┐(A∨B)=┐A∧┐B。

常见错误

注意德摩根律的正确应用:┐(A∧B)=┐A∨┐B,┐(A∨B)=┐A∧┐B。C++中逻辑运算符有短路求值特性。

详细解析(节选)

【考点】队列操作|取值与弹出|条件判断

本题考查《GESP 六级大纲》「数据结构与算法」模块中的「队列操作」与「条件判断」。命题人卡住的是考生对front()与pop()调用顺序的混淆——很多人以为先删再比,却忘了front()在空队上会抛异常。

正确链是:先判非空→用q.front()取值判断→再q.pop()删除。若先pop()再取值,空队时front()会崩溃;若只赋值不删,则不满足「删除该元素」的需求。这一类「取值后删除」的题通法是:先判断条件,再执行副作用,避免状态丢失。

A只赋值不删,违背题意;C先删后比,空队时front()抛异常且比的是新头;D混用栈的top(),语义错误。最阴险的是C,它利用考生「先删再比」的惯性思维,且front()在空队上会异常,连调试都难发现。

若把a改为q.size(),则应判断size() > 0再pop();若改成q.pop()后返回,则函数应返回新队首。刷到类似题先问自己「命题人想考我什么」:是考front与pop顺序,还是考空队边界?

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