Jak iterować std :: set na podstawie offsetu z set.begin ()?

Aug 20 2020

Potrzebuję iteratora opartego na przesunięciu.

tzn. posiadanie iteratora na początek:

auto it = set.begin()

Muszę dostać się do iteratora mającego offset ofst:

it + ofst

Czy jest na to sposób? Potrzebuję przyrostowego zwiększenia it++czasów iteratora ofst.

Odpowiedzi

5 JeJo Aug 20 2020 at 08:21

Muszę dostać się do iteratora po korekcji ofst: it + ofst: czy istnieje sposób, aby to zrobić?

Nie, nie ma operator+zdefiniowanego dla tego przeciążenia std::set::iterator(czyli iteratorów dwukierunkowych ). Możesz jednak użyć std::next, from header w następujący sposób, aby osiągnąć to samo.

#include <iterator>  // std::next

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

To w zasadzie za sceną również zwiększa się ofstrazy.

std::setMa iteratorów dwukierunkowych , które ma luksusy jak losowych iteratorów dostępowych , a więc trzeba przyrostu takiego.


Biorąc to pod uwagę, możesz przeciążać operator+(i być może operator-) dla iteratorów dwukierunkowych, co jednak nie będzie zalecane .