【问题标题】:Purpose of front() and back() in assigning values in a Queue? (C++)front() 和 back() 在队列中分配值的目的? (C++)
【发布时间】:2010-03-19 20:18:34
【问题描述】:
我已经声明:
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->3->13->22->8->空
我不明白对 Q.front() 和 Q.back() 的调用是做什么的。据我了解,它们分别返回对第一个或最后一个元素的引用,但我看不出如果没有进行这些调用,我的列表会有什么不同。它们有什么作用吗?
对不起,如果这看起来微不足道,但我正试图弄清楚那些电话是有目的的,或者我的教授只是想和我开玩笑。
【问题讨论】:
标签:
c++
queue
linked-list
【解决方案1】:
他们给你一个参考,但如果你想用它做点什么,那么你必须使用那个参考。
例如
Q.push(37);
Q.push(19);
Q.front() = 8;
那你应该...
8,19
仅仅在自己的行上调用 Q.front() 或 Q.back() 是没有效果的。这些通常被称为访问器函数,它们使您可以访问一个值(有时您可以根据需要对其进行修改),但它们本身不会修改底层数据结构。
【解决方案2】:
这些调用的返回值没有做任何事情,它们不会改变队列本身,所以你说没有它们你的队列会是一样的是正确的。您的编译器可能也注意到了这一点并对其进行了优化。
【解决方案3】:
它们对于查看队列中的值很有用,而无需删除和放回它们。它在某些情况下可能很有用!
例如,如果第一个元素大于 X,您将如何决定从队列中删除第一个元素?
如果没有front(),您将不得不将其从队列中删除,检查值,然后使用它,如果条件不满足则将其放回。使用此访问器方法,您可以在更改底层数据结构之前轻松检查它。