我已声明:
queue<int, list<int> > Q
经过一系列电话会议后:
Q.push(37);
Q.pop();
Q.push(19);
Q.push(3);
Q.push(13);
Q.front();
Q.push(22);
Q.push(8);
Q.back();
我得到: 19-&GT; 3→13-&GT; 22-&GT; 8-&GT; NULL
我没有得到的是对Q.front()和Q.back()的调用。根据我的理解,他们分别返回对第一个或最后一个元素的引用,但是我没有看到如果没有进行这些调用,我的列表会有什么不同。他们有任何影响吗?
对不起,如果这看起来微不足道,但我想弄清楚这些电话是否有目的,或者我的教授只是试图搞砸我。
答案 0 :(得分:9)
他们给你一个参考,但如果你想用它做一些事情,那么你必须使用那个参考。
e.g。
Q.push(37);
Q.push(19);
Q.front() = 8;
然后你应该......
8,19
仅在自己的行上调用Q.front()或Q.back()无效。这些通常被称为访问器函数,它们允许您访问某个值(如果需要,您有时可以修改它),但它们本身不会修改基础数据结构。
答案 1 :(得分:2)
这些调用的返回值没有任何作用,并且它们不会改变队列本身,所以你说你的队列在没有它们的情况下是相同的是正确的。您的编译器也可能已经注意到了这一点,并将它们优化掉了。
答案 2 :(得分:1)
它们可用于查看队列中的值,而无需将其删除并放回......在某些情况下它可能很有用!
例如,如果第一个元素大于X,你将如何决定从队列中删除第一个元素?
如果没有front()
,则必须将其从队列中删除,检查值,然后使用它或在不满足条件时将其放回。使用此访问器方法,您可以在更改基础数据结构之前轻松检查它。