下列代码执行后的输出结果是( )。
stack<int> s;
queue<int> q;
for (int i = 2; i <= 6; i += 2) {
s.push(i);
q.push(i);
}
s.pop();
q.pop();
cout << s.top() << " " << q.front();循环 i=2,4,6 依次入栈入队,栈顶为 6、队头为 2;随后各弹出一个元素,栈顶变为 4、队头变为 4,输出 4 4。
A 项是只 push 未 pop 的结果;C 项误以为队列仍保留 6;D 项误以为栈仍保留 6。本质是混淆栈的 LIFO 与队列的 FIFO:两者入队入栈顺序相同,但弹出顺序相反,因此 pop 后栈顶与队头恰好互换。
本题考查《GESP 考试大纲》六级"数据结构"模块中的栈与队列操作。命题人把这道题放在这里,就是要卡住考生对 LIFO 与 FIFO 最本质的区别——很多学生看到"push/pop"就条件反射地想"先进先出",却忘了栈是后进先出。
循环 i 从 2 到 6 步长为 2,共执行 3 次:
此时栈顶 s.top() 是 6,队头 q.front() 是 2。
接着各弹出一个:
s.top() 是 4q.front() 是 4输出 4 4。