顶部,然后是弹出用法

Top then Pop Usage

提问人:juco 提问时间:1/15/2023 最后编辑:Evgjuco 更新时间:1/16/2023 访问量:62

问:

我是来自 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() 是否在上面的示例中返回副本,如果是,为什么?

C++ 整数 逐个引用 deque

评论


答:

4赞 Sam Varshavchik 1/15/2023 #1

在上面的示例中,.back() 是否返回副本

否,返回对队列中最后一个值的引用。back()

int topNumber = numbers.back();

引用被分配给 .这有效地将引用的对象复制到一个名为 的完全不同且不相关的对象中。inttopNumber

当对某个对象的引用被分配给其他对象时,它本身不是引用,就会创建引用对象的副本,这就是 C++ 的工作方式(如果它被分配给引用,则副本将制作成分配给引用对象)。

从那时起,可以删除 中的最后一个值。它会消失的。但它的副本仍然保留在 .dequetopNumber

评论

0赞 juco 1/15/2023
谢谢你@sam的及时回答。后续问题,如果我们像这样分配 topNumber 会发生什么,行为会是未定义的吗?int& topNumber = numbers.back();
3赞 Sam Varshavchik 1/15/2023
没错,之后的任何使用都将导致未定义的行为。topNumberpop_back()