std::prev
De cppreference.com
<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
Ejecuta este código
#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) |
| Avanza un iterador en una distancia determinada. (función) | |
| Devuelve la distancia entre dos iteradores. (función) | |
(C++20) |
Decrementa un iterador en una distancia dada o a un límite. (niebloid) |