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.