c++ - index - ¿Existe un algoritmo STL para encontrar la última instancia de un valor en una secuencia?
queue find c++ (2)
Pero el problema ahora es que no puedo hacer rangos de "cabeza" y "cola" utilizando begin () y end () porque no son iteradores inversos.
reverse_iterator::base()
es lo que está buscando: sección los nuevos miembros en la descripción del Revisor_interviador de los SGI o aquí en cppreference.com
Usando STL, quiero encontrar la última instancia de un determinado valor en una secuencia.
Este ejemplo encontrará la 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 usar split
para hacer cosas a los subrangos begin()
.. split
y split
... end()
. Quiero hacer algo similar, pero con la división dividida en la última instancia de 0. Mi primer instinto fue usar iteradores inversos.
intvec::const_iterator split = std::find(values.rbegin(), values.rend(), 0);
Esto no funciona porque split
es el tipo de iterador incorrecto. Asi que ...
intvec::const_reverse_iterator split = std::find(values.rbegin(), values.rend(), 0);
Pero el problema ahora es que no puedo hacer rangos de "cabeza" y "cola" como begin(), split
y split, end()
porque no son iteradores inversos. ¿Hay alguna manera de convertir el iterador inverso al iterador directo (o acceso aleatorio) correspondiente? ¿Hay una mejor manera de encontrar la última instancia de un elemento en la secuencia para que me quede un iterador compatible?
¿Qué pasa con std::find_end ? (Para encontrar la última aparición de una secuencia)