Для чего используется std :: vector :: front ()? - PullRequest
22 голосов
/ 21 января 2010

Извините, если раньше об этом спрашивали, но мне интересно, для чего используется std::vector::front().

Есть ли причина использовать, например, myvector.front() вместо myvector[0] или myvector.at(0)?

Ответы [ 3 ]

21 голосов
/ 21 января 2010

Некоторые из общих алгоритмов, которые также работают со списками, используют его.

Это пример общего принципа: если вы предоставляете средства доступа для всей семантики , которую вы поддерживаете , а не только для реализации , которую вы поддерживаете , ее проще написать в общем и, следовательно, проще повторно использовать код.

13 голосов
/ 21 января 2010

Если тип myvector изменяется на другой тип данных, который не индексируется, например, список, вам не придется изменять код, который обращается к передней части контейнера.

6 голосов
/ 21 января 2010

Это обеспечивает статический полиморфизм.

Допустим, я написал алгоритм с использованием класса очереди. Он имеет функцию front () для получения следующего элемента очереди и функцию enqueue () для добавления в конец очереди. Допустим, я обнаружил, что этот класс очереди написан плохо и очень медленно, и я бы предпочел использовать std :: vector, который намного быстрее (я знаю, что есть std :: queue, это всего лишь пример). Если бы единственный способ получить первый элемент std :: vector был с v [0], мне пришлось бы пройти через мой код и заменить все мои вызовы front () на [0]. Но, реализовав front (), std :: vector теперь может быть заменой моего класса очереди. Единственный код, который мне нужно изменить, - это тип контейнера в моем алгоритме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...