una ultimo resueltos nodo listas lista insertar hacer estatica enlazadas eliminar elementos ejercicios código como buscar borrar agregar c++ stl stdlist

c++ - ultimo - ¿Cómo puedo obtener el penúltimo elemento en una lista?



lista estatica c++ (3)

Tengo un std::list<double> foo;

Estoy usando

if (foo.size() >= 2){ double penultimate = *(--foo.rbegin()); }

pero esto siempre me da un valor arbitrario de penultimate .

¿Qué estoy haciendo mal?


En lugar de disminuir rbegin , debe incrementarlo, como se muestra aquí: 1

double penultimate = *++foo.rbegin();

como rbegin() devuelve un iterador inverso , entonces ++ es el operador que se mueve hacia atrás en el contenedor. Tenga en cuenta que también he eliminado los paréntesis superfluos: eso no es del gusto de todos.

Actualmente, el comportamiento de su programa no está definido, ya que realmente se está moviendo a end() , y no se le permite desreferenciar eso. La naturaleza arbitraria de la salida es una manifestación de ese comportamiento indefinido.

1 Conserve la verificación de tamaño mínimo que tiene actualmente.


La forma más clara, en mi opinión, es utilizar la construcción diseñada para este propósito (C ++ 11):

double penultimate = *std::prev(foo.end(), 2)


Yo solo haría *--(--foo.end()) ; No hay necesidad de iteradores inversos. También es menos confuso.