c++ - library - lista sequencial em c



Como posso obter o penúltimo elemento em uma lista? (2)

Eu tenho um std::list<double> foo;

estou a usar

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

mas isso sempre me dá um valor arbitrário de penultimate .

O que estou fazendo de errado?

https://ffff65535.com


A maneira mais clara, na minha opinião, é usar o construto projetado para essa finalidade (C ++ 11):

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

Em vez de decrementar o rbegin , você deve incrementá-lo, como mostrado aqui: 1

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

como rbegin() retorna um iterador reverso , então ++ é o operador para retroceder no contêiner. Note que também deixei de lado os parênteses supérfluos: isso não é para todos os gostos.

Atualmente, o comportamento do seu programa é indefinido, uma vez que você está realmente se movendo para end() , e você não tem permissão para desreferenciar isso. A natureza arbitrária da saída é uma manifestação desse comportamento indefinido.

1 Mantenha a verificação de tamanho mínimo que você possui atualmente.





stdlist