Lo siento si esto se ha preguntado antes, pero me pregunto cuál es el uso de std::vector::front()
.¿Para qué se utiliza std :: vector :: front()?
¿Hay alguna razón para usar, p. myvector.front()
en lugar de myvector[0]
o myvector.at(0)
?
Lo siento si esto se ha preguntado antes, pero me pregunto cuál es el uso de std::vector::front()
.¿Para qué se utiliza std :: vector :: front()?
¿Hay alguna razón para usar, p. myvector.front()
en lugar de myvector[0]
o myvector.at(0)
?
Algunos de los algoritmos genéricos que también funcionan en listas lo usan.
Este es un ejemplo de un principio general: si proporciona métodos de acceso para todos los semántica que el apoyo, no sólo la aplicación te apoyo, es más fácil escribir de forma genérica y por lo tanto más fácil de reutilizar el código.
+1: Edición sólida. –
Ah, entonces se trata más de consistencia con otras clases de contenedor. Simplemente por curiosidad: ¿es vector :: front() equivalente a [0] o a at (0)? Quiero decir, ¿qué sucede si el vector está vacío? – Tim
@Tim: Buena pregunta. Wikipedia dice comportamiento indefinido: http://en.wikipedia.org/wiki/Vector_(C%2B%2B) y http://fredosaurus.com/notes-cpp/stl-containers/sequence-functions.html dice lo mismo como [0], que supongo que tampoco está definido si el vector está vacío. – dmckee
Si el tipo de myvector cambia a otro tipo de datos que no es indexable, como una lista, no tendrá que cambiar el código que accede al frente del contenedor.
Las respuestas de tu y la del póster anterior deben combinarse. Concepto abstracto + ejemplo concreto para el triunfo. – Omnifarious
Hacer esto proporciona algo llamado polimorfismo estático.
Digamos que he escrito un algoritmo utilizando una clase de cola. Tiene una función front() para obtener el siguiente elemento de la cola, y una función enqueue() para agregar al final de la cola. Ahora digamos que descubrí que esta clase de cola está escrita mal y muy despacio, y prefiero usar std :: vector, que es mucho más rápido (sé que hay una cola std ::, esto es solo un ejemplo). Si la única forma de obtener el primer elemento de un std :: vector fuera con v [0], tendría que revisar mi código y reemplazar todas mis llamadas a front() con [0]. Pero al implementar front(), std :: vector ahora puede ser un reemplazo directo para mi clase de cola. El único código que tengo que cambiar es el tipo de contenedor en mi algoritmo.
más interesante ... ¿por qué hay un frente() cuando ya hay un comienzo()? – Inverse
@Inverse: porque los adaptadores de contenedor 'std :: queue' y' std :: stack' tienen 'front()' pero no 'begin()'. –
Y para ser coherente con 'back()', 'myvector [myvector.size() - 1]' no es tan directo. – dalle