我将从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 仍然有&#34;一个&#34;在 pop()&nbsp;
之后答案 0 :(得分:1)
因为val
不是参考。不是在队列的前面或其他任何地方。
当你这样做时
val = q.front();
你将当前位于队列前面的内容复制到val
。
稍后使用队列执行的操作不会影响此副本。
如果您需要参考,则需要val
作为参考。
请记住,通过使val
成为引用,它只会引用队列中的一个元素。弹出前面一次后,该引用变为无效。添加新元素不会改变你的引用,它仍会引用队列中的相同元素,它不会引用新的前面。一旦绑定,你就无法重新绑定引用。
总而言之,使用对队列中元素的引用在大多数用例中都是无用的。