Извините, если это было задано раньше, но мне интересно, что такое std::vector::front().
Есть ли причина для использования, например. myvector.front(), а не myvector[0] или myvector.at(0)?
Ответ 1
Некоторые из общих алгоритмов, которые также работают над списками, используют его.
Это пример общего принципа: если вы предоставляете аксессуры для всей семантики, которую вы поддерживаете, а не только для поддержки, которую вы поддерживаете, ее проще писать в общем и, следовательно, проще повторно использовать код.
Ответ 2
Если тип myvector изменяется на другой тип данных, который не индексируется, например список, вам не придется менять код, который обращается к передней части контейнера.
Ответ 3
Выполнение этого обеспечивает нечто, называемое статическим полиморфизмом.
Скажем, я написал алгоритм с использованием класса очереди. Он имеет функцию front() для получения следующего элемента очереди и функцию enqueue() для добавления в конец очереди. Теперь скажем, что я обнаружил, что этот класс очереди написан плохо и очень медленно, и я предпочел бы использовать std::vector, который намного быстрее (я знаю, что std:: queue, это просто пример). Если бы единственный способ получить первый элемент std::vector был с v [0], мне пришлось бы пройти через мой код и заменить все мои вызовы на front() на [0]. Но, реализуя front(), std::vector теперь может быть заменой для моего класса очереди. Единственным кодом, который мне нужно изменить, является тип контейнера в моем алгоритме.