Espacios de nombres
Variantes

std::prev

De cppreference.com
 
 
Biblioteca de iteradores
Conceptos de iteradores
Primitivas de iteradores
Conceptos de algoritmos y servicios
Conceptos invocables indirectos
Requerimientos comunes de algoritmos
Servicios
Adaptadores de iteradores
Iteradores de flujos
Puntos de personalización de iteradores
Operaciones de iteradores
(C++11)
(C++11)
Acceso a rangos
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody>
Definido en el archivo de encabezado <iterator>
template< class BidirIt > BidirIt prev( BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1 );
(desde C++11)
(hasta C++17)
template< class BidirIt > constexpr BidirIt prev( BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1 );
(desde C++17)

Devuelve el nésimo predecesor (o -nésimo sucesor si n es negativo) del iterador it.

Parámetros

it - Un iterador.
n - Número de elementos a retroceder.
Requisitos de tipo
-
BidirIt debe satisfacer los requisitos de BidirectionalIterator.

Valor de retorno

Un iterador de tipo BidirIt que contiene el nésimo predecesor (o -npredecesor sucesor si n es negativo) del iterador it.

Complejidad

Lineal.

Sin embargo, si BidirIt cumple además los requisitos de RandomAccessIterator, la complejidad es constante.

Posible implementación

template<class BidirIt>
constexpr // desde C++17
BidirIt prev(BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1)
{
    std::advance(it, -n);
    return it;
}

Notas

Aunque la expresión --c.end() suele compilarse, no se garantiza que lo haga: c.end() es una expresión de r-valor y no hay ningún requisito de iterador que especifique que se garantiza que la disminución de un r-valor funcione. En particular, cuando los iteradores se implementan como punteros o su operator-- está calificado como referencia a l-valor, --c.end() no compila, mientras que std::prev(c.end()) sí.

Ejemplo

#include <iostream>
#include <iterator>
#include <vector>

int main()
{
    std::vector<int> v{3, 1, 4};

    auto it = v.end();
    auto pv = std::prev(it, 2);
    std::cout << *pv << '\n';

    it = v.begin();
    pv = std::prev(it, -2);
    std::cout << *pv << '\n';
}

Salida:

1
4

Véase también

(C++11)
Incrementa un iterador.
(función) [editar]
Avanza un iterador en una distancia determinada.
(función) [editar]
Devuelve la distancia entre dos iteradores.
(función) [editar]
Decrementa un iterador en una distancia dada o a un límite.
(niebloid) [editar]