Si front()
devuelve una referencia y el contenedor está vacío, ¿qué obtengo, una referencia indefinida? ¿Significa que necesito verificar empty()
antes de cada front()
?¿Qué obtengo del frente() del contenedor estándar vacío?
Respuesta
Obtiene un comportamiento indefinido - necesita verificar que el contenedor contiene algo usando empty() (que verifica si el contenedor está vacío) antes de llamar a front().
Obtiene un comportamiento indefinido.
Para obtener el control de rango, utilice (0). Si esto falla, obtiene una excepción out_of_range
.
comportamiento indefinido
Siempre has tiene que asegurarse de que su contenedor no está vacía antes de llamar frontal() en este caso. Llamar vacío() como protección segura es bueno.
Por supuesto, dependiendo del diseño de su programa, tener siempre un contenedor no vacío podría ser una declaración invariable que le permite evitar y guardar la llamada vacía() cada vez que llama a front(). (¿o al menos en alguna parte de su código?)
Pero como se indicó anteriormente, si desea evitar el comportamiento indefinido en su programa, hágalo como una constante invariante.
Sí, puede utilizar 'at' como mencionó Graham en lugar de usar el frente.
Pero, en (0) solo está disponible para algunos contenedores - vectores, deque y no para otros - list, queue, stack. En estos casos, debe recurrir a la seguridad del cheque "vacío".
- 1. impulso :: shared_ptr contenedor estándar
- 2. Cargar biblioteca del contenedor
- 3. Descripción del contenedor de servlets
- 4. Enlace del alcance del bloque C estándar
- 5. Manejo del evento de detención/recarga del contenedor
- 6. div deslizable dentro del contenedor
- 7. Comprobación del lado del servidor frente al lado del agente
- 8. $ _POST está vacío después del envío del formulario
- 9. Nombre del método vacío, ¿qué hace esto realmente?
- 10. ¿Cómo obtengo el título del botón MessageBox?
- 11. Elemento ignora el acolchado del elemento contenedor
- 12. Por qué el posicionamiento absoluto dentro del contenedor requiere que el contenedor sea relativo
- 13. ASP.NET Intellisense frente a los atributos del lado del cliente
- 14. C estándar frente a la simplificación inconsistencia
- 15. ¿Cuál es el tamaño del vacío?
- 16. desventajas del contenedor de temperatura MVC 3
- 17. Android: Cómo consultar una lista del nombre del contenedor
- 18. Qt: clases Qt frente a estándar C++
- 19. Mejores prácticas para el lado del cliente frente a las redirecciones del lado del servidor: cuándo usar qué?
- 20. Legalidad del cifrado en bibliotecas estándar
- 21. ¿Cuál es el objetivo del estándar C99?
- 22. ¿Detecta la ocultación del teclado del iPad frente a la conexión del teclado externo?
- 23. Windsor: extracción de objetos transitorios del contenedor
- 24. Fuente de datos JNDI fuera del contenedor
- 25. WPF: Eliminar "usted mismo" del contenedor principal
- 26. desbordamiento (desplazamiento) - 100% altura del contenedor
- 27. Tamaño del contenedor en Matplotlib (Histograma)
- 28. Texto CSS Alinear parte inferior del contenedor
- 29. C#, evento de incendio del contenedor
- 30. Administrar la configuración del contenedor autofac
También puede usar empty(). –
Ojalá hubieran sido más específicos cuando diseñaron y especificaron STL. Creo que una gran cantidad de problemas y errores de portación de C++ son causados por implementaciones de estos "comportamientos indefinidos" que explotan por programadores no tan buenos. –
La decisión de crear algo UB generalmente significa que hubo una sobrecarga en la alternativa, en este caso lanzando una excepción, que C++ siempre trata de evitar. –