¿Cómo iterar std :: set basado en el desplazamiento de set.begin ()?

Aug 20 2020

Necesito obtener un iterador basado en el desplazamiento.

es decir, tener el iterador para comenzar:

auto it = set.begin()

Necesito llegar al iterador que tiene compensación ofst:

it + ofst

¿Hay una manera de hacerlo? de Necesito incrementar incrementalmente it++los ofsttiempos del iterador .

Respuestas

5 JeJo Aug 20 2020 at 08:21

Necesito llegar al iterador haber compensado ofst: it + ofst: ¿hay una manera de hacer eso?

No, no hay una operator+sobrecarga definida para esto std::set::iterator(también conocidos como iteradores bidireccionales ). Sin embargo, puede usar std::next, desde el encabezado de la siguiente manera para lograr lo mismo.

#include <iterator>  // std::next

auto nthIter = std::next(it, ofst);

Esto básicamente detrás de escena también incrementa los ofsttiempos.

El std::settiene iteradores bidireccionales , que no tiene lujos como iteradores de acceso aleatorio , y por lo tanto necesita de la subasta como esta.


Dicho esto, podría sobrecargar operator+(y tal vez operator-) los iteradores bidireccionales, lo que no se recomendará .