Ich habe diese Seite durchgesehen, kann aber den Grund dafür nicht ermitteln. Dort wird das erwähnt
"Es ist sinnvoller, überhaupt keinen Wert zurückzugeben und von Clients zu verlangen, dass sie front () verwenden, um den Wert an der Vorderseite der Warteschlange zu überprüfen."
Um ein Element von front () aus zu untersuchen, musste dieses Element jedoch auch in lvalue kopiert werden. Zum Beispiel in diesem Codesegment
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);
/ * Hier wird temporär auf RHS erstellt, das dem Ergebnis zugewiesen wird. Falls Rückgaben als Referenz zurückgegeben werden, wird das Ergebnis nach der Pop-Operation ungültig. * /
result = myqueue.front(); //result.
std::cout << ' ' << result;
myqueue.pop();
In der fünften Zeile erstellt das cout- Objekt zuerst eine Kopie von myqueue.front () und weist diese dann dem Ergebnis zu. Was ist der Unterschied? Die Pop-Funktion hätte das Gleiche tun können.
front()
musste dieses Element auch in lvalue kopiert werden" - nein, das tut es nicht. front
Gibt eine Referenz zurück, keinen Wert. Sie können den Wert, auf den er sich bezieht, überprüfen, ohne ihn zu kopieren.
pop()
. Wenn Sie verwenden, std::queue<T, std::list<T>>
besteht keine Sorge, dass die angegebene Referenz front()
durch a ungültig wird push()
. Aber Sie müssen wissen , Ihre Nutzungsmuster und Ihre Einschränkungen dokumentieren sollten.
void std::queue::pop();
).