Como iterar std :: set com base no deslocamento de set.begin ()?

Aug 20 2020

Preciso obter um iterador com base no deslocamento.

ou seja, ter o iterador para começar:

auto it = set.begin()

Preciso chegar ao iterador com deslocamento ofst:

it + ofst

Existe uma maneira de fazer isso? de Preciso aumentar incremental it++os ofsttempos do iterador .

Respostas

5 JeJo Aug 20 2020 at 08:21

Preciso chegar ao iterador com deslocamento ofst:: it + ofstexiste uma maneira de fazer isso?

Não, não há operator+sobrecarga definida para isso para std::set::iterator(também conhecido como iteradores bidirecionais ). No entanto, você pode usar std::next, a partir do cabeçalho da seguinte forma para achive o mesmo.

#include <iterator>  // std::next

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

Basicamente, isso ofsttambém aumenta os tempos por trás da cena .

O std::settem iteradores bidirecionais , que não têm luxos como iteradores de acesso aleatório e, portanto, precisam ser incrementados dessa forma.


Dito isso, você pode sobrecarregar operator+(e talvez operator-) para os iteradores bidirecionais, o que não será recomendado .