在队列中分配值时front()和back()的目的是什么? (C ++)

时间:2010-03-19 20:18:34

标签: c++ queue linked-list

我已声明:

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()的调用。根据我的理解,他们分别返回对第一个或最后一个元素的引用,但是我没有看到如果没有进行这些调用,我的列表会有什么不同。他们有任何影响吗?

对不起,如果这看起来微不足道,但我想弄清楚这些电话是否有目的,或者我的教授只是试图搞砸我。

3 个答案:

答案 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(),则必须将其从队列中删除,检查值,然后使用它或在不满足条件时将其放回。使用此访问器方法,您可以在更改基础数据结构之前轻松检查它。