2009-03-25 7 views

Respuesta

41

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().

+0

También puede usar empty(). –

+1

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. –

+0

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. –

12

Obtiene un comportamiento indefinido.

Para obtener el control de rango, utilice (0). Si esto falla, obtiene una excepción out_of_range.

1

comportamiento indefinido

1

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.

2

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".

Cuestiones relacionadas