Przeszedłem przez tę stronę, ale nie mogę znaleźć powodu tego samego. Tam jest o tym mowa
„bardziej rozsądne jest, aby nie zwracał żadnej wartości i wymagał od klientów używania metody front () w celu sprawdzenia wartości na początku kolejki”
Ale sprawdzenie elementu z front () wymagało również skopiowania tego elementu w lvalue. Na przykład w tym segmencie kodu
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);
/ * tutaj tymczasowe zostanie utworzone na RHS, które zostanie przypisane do wyniku, aw przypadku, gdy zwróci przez odniesienie, wynik zostanie unieważniony po operacji pop * /
result = myqueue.front(); //result.
std::cout << ' ' << result;
myqueue.pop();
w piątej linii obiekt cout najpierw tworzy kopię myqueue.front (), a następnie przypisuje ją do wyniku. Jaka jest różnica, funkcja pop mogłaby zrobić to samo.
front()
również wymagało skopiowania tego elementu w lwartości” - nie, nie jest. front
zwraca odniesienie, a nie wartość. Możesz sprawdzić wartość, do której się odnosi, bez kopiowania jej.
pop()
. Jeśli używasz, std::queue<T, std::list<T>>
nie ma obaw, że podane odniesienie front()
zostanie unieważnione przez push()
. Ale musisz znać swój wzorzec użytkowania i dokumentować swoje ograniczenia.
void std::queue::pop();
.).