Назначение front () и back () при назначении значений в очереди? (C ++) - PullRequest
2 голосов
/ 19 марта 2010

Я объявил:

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 (). Из того, что я понимаю, они возвращают ссылку на первый или последний элементы соответственно, но я не вижу, как мой список был бы другим, если бы эти вызовы не были сделаны. Есть ли у них какой-либо эффект?

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

Ответы [ 3 ]

9 голосов
/ 19 марта 2010

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

, например

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

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

8,19

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

2 голосов
/ 19 марта 2010

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

1 голос
/ 19 марта 2010

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

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

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

...