提问人:juco 提问时间:1/15/2023 最后编辑:Evgjuco 更新时间:1/16/2023 访问量:62
顶部,然后是弹出用法
Top then Pop Usage
问:
我是来自 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() 是否在上面的示例中返回副本,如果是,为什么?
答:
4赞
Sam Varshavchik
1/15/2023
#1
在上面的示例中,.back() 是否返回副本
否,返回对队列中最后一个值的引用。back()
int topNumber = numbers.back();
引用被分配给 .这有效地将引用的对象复制到一个名为 的完全不同且不相关的对象中。int
topNumber
当对某个对象的引用被分配给其他对象时,它本身不是引用,就会创建引用对象的副本,这就是 C++ 的工作方式(如果它被分配给引用,则副本将制作成分配给引用对象)。
从那时起,可以删除 中的最后一个值。它会消失的。但它的副本仍然保留在 .deque
topNumber
评论
0赞
juco
1/15/2023
谢谢你@sam的及时回答。后续问题,如果我们像这样分配 topNumber 会发生什么,行为会是未定义的吗?int& topNumber = numbers.back();
3赞
Sam Varshavchik
1/15/2023
没错,之后的任何使用都将导致未定义的行为。topNumber
pop_back()
评论