我将从 queue::front() 返回的值收集到局部变量中。根据文档,queue::front() 返回引用。 那么,如果我将其从队列中弹出,收集到的值如何仍然存在?
int main()
{
std::string val;
{
std::queue<std::string> q;
q.push("one");
q.push("two");
q.push("three");
val = q.front();
q.pop();
q.pop();
q.pop();
std::cout << "is queue empty: " << boolalpha << q.empty() << '\n';
}
std::cout << "val: " << val << '\n';
}
输出是:
is queue empty: true
val: one
为什么 val 在 pop() 之后仍然有“一”
最佳答案
因为 val
不是引用。不要排在队列前面或其他任何地方。
当你做的时候
val = q.front();
您复制当前在队列前面的内容到val
。
您稍后对队列所做的操作不会影响此拷贝。
如果您想要一个引用,那么您需要将val
设为一个引用。
请记住,通过将 val
设为引用,它只会引用队列中的一个元素。一旦弹出前面板一次,该引用就失效了。添加新元素不会改变你的引用,它仍然会引用队列中的相同元素,它不会引用新的前端。并且您无法在绑定(bind)后重新绑定(bind)引用。
总而言之,在大多数用例中使用对队列中元素的引用是毫无用处的。
关于c++ - 为什么 front() 返回的值在 std::queue 的 pop() 之后仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49666710/