Utilizando STL, quiero encontrar la última instancia de un cierto valor en una secuencia.¿Hay un algoritmo STL para encontrar la última instancia de un valor en una secuencia?
En este ejemplo encontrará primera instancia de 0 en un vector de ints.
#include <algorithm>
#include <iterator>
#include <vector>
typedef std::vector<int> intvec;
intvec values;
// ... ints are added to values
intvec::const_iterator split = std::find(values.begin(), values.end(), 0);
Ahora puedo utilizar split
a hacer cosas para los sub-intervalos begin()
.. split
y split
.. end()
. Quiero hacer algo similar, pero con el conjunto dividido en la última instancia de 0. Mi primer instinto fue utilizar iteradores inversos.
intvec::const_iterator split = std::find(values.rbegin(), values.rend(), 0);
Esto no funciona porque split
es el tipo incorrecto de iterador. Así que ...
intvec::const_reverse_iterator split = std::find(values.rbegin(), values.rend(), 0);
Pero el problema ahora es que no puedo hacer "cabeza" y "cola" rangos como begin(), split
y split, end()
porque aquellos que no están invertidas iteradores. ¿Hay alguna manera de convertir el iterador inverso al correspondiente iterador directo (o de acceso aleatorio)? ¿Hay una mejor manera de encontrar la última instancia de un elemento en la secuencia para que me quede un iterador compatible?
Excelente. ¡Gracias! –
Tenga en cuenta que 'reverse_iterator :: base()' no apunta al mismo elemento, sino al elemento después del elemento encontrado. Scott Meyer lo expresó mejor en la directriz 3 de este artículo: http://www.ddj.com/cpp/184401406 – AFoglia
[std :: reverse_iterator :: base] (http://en.cppreference.com/w/cpp/ entrada iterator/reverse_iterator/base) en cppreference – maxschlepzig