2010-03-19 2 views
2

Я объявил:Назначение функций front() и back() при назначении значений в очереди? (C++)

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-> NULL

То, что я не получаю, это вызовы Q.front() и Q.back(). Из того, что я понимаю, они возвращают ссылку на первый или последний элементы соответственно, но я не вижу, как мой список будет другим, если бы эти вызовы не были сделаны. У них есть какой-то эффект?

Извините, если это кажется тривиальным, но я пытаюсь понять, что у этих вызовов есть цель, или мой профессор просто пытается вставить меня.

ответ

9

Они дают вам ссылку, но если вы хотите что-то с ней сделать, тогда вы должны использовать эту ссылку.

например.

Q.push(37); 
Q.push(19); 
Q.front() = 8; 

Тогда вы должны иметь ...

8,19 

Просто вызова Q.front() или Q.back() по своей собственной линии не имеет никакого эффекта. Они обычно называются функциями доступа, они дают вам доступ к значению (которое вы иногда можете изменить, если хотите), но сами не изменяете базовую структуру данных.

1

Они полезны для просмотра значений в очереди без необходимости их удаления и их возврата .. это может быть полезно в определенных ситуациях!

Например, как бы вы решили удалить первый элемент из очереди, только если он больше X?

Без front() вам нужно будет удалить его из очереди, проверить значение, а затем использовать его или вернуть его, если условие не выполнено. С помощью этого метода доступа вы можете легко проверить его перед изменением базовой структуры данных.

2

Ничего не сделано с возвращаемым значением этих вызовов, и они не изменяют сама очередь, поэтому вы правильно говорите, что ваша очередь была бы такой же без них. Возможно, ваш компилятор заметил это и оптимизировал их.