You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ deque中pop_back后如何使用末尾元素?back()是否返回副本?

Deque容器末尾元素操作疑问解答

提问内容

我是从Python转C++的初学者,目前正在学习deque容器,对取出并使用末尾元素后再将其弹出的操作感到困惑。根据cppreference.com的说明,pop_back()会移除容器的末尾元素,且指向被移除元素的引用会失效。示例代码如下:

std::deque<int> numbers = {1, 2, 3};
int topNumber = numbers.back(); // Return reference to top element
numbers.pop_back(); // remove the last element and now topNumber reference is invalidates

请问:如何在弹出末尾元素后仍能使用该元素?上述示例中back()是否返回了副本?若是,原因是什么?

解答

1. 弹出后仍使用末尾元素的方法

你写的这段代码其实已经实现了需求。topNumber是独立的int变量,当你把numbers.back()的结果赋值给它时,已经将容器末尾元素的数值拷贝到了topNumber里。哪怕之后调用pop_back()删掉容器里的原元素,topNumber里的数值依然保留,完全可以正常使用。

如果操作的是自定义类对象,逻辑也一致:先把back()返回的对象拷贝到新变量中,再执行pop_back(),新变量和容器内元素相互独立,不会受删除操作影响。

2. 关于back()是否返回副本

deque::back()本身返回的是引用,不是副本。但你示例里的topNumber是int类型(非引用),把引用赋值给普通变量时,C++会自动触发值拷贝,将引用指向的元素内容复制到topNumber中,所以topNumber是副本,但back()的返回值本质是引用。

这是C++基础语法规则:当引用被赋值给非引用类型变量时,会自动进行值拷贝,两者从此各自独立,互不影响。


内容的提问来源于stack exchange,提问作者juco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:15:27