Come iterare std :: set in base all'offset da set.begin ()?

Aug 20 2020

Ho bisogno di un iteratore basato sull'offset.

cioè avere l'iteratore per inizio:

auto it = set.begin()

Devo arrivare all'iteratore con offset ofst:

it + ofst

C'è un modo per farlo? di ho bisogno di aumentare incrementalmente it++i ofsttempi dell'iteratore .

Risposte

5 JeJo Aug 20 2020 at 08:21

Devo arrivare all'iteratore con offset ofst:: it + ofstc'è un modo per farlo?

No, non è stato operator+definito alcun sovraccarico per questo std::set::iterator(aka iteratori bidirezionali ). Tuttavia, puoi utilizzare std::next, dall'intestazione come segue per ottenere lo stesso risultato.

#include <iterator>  // std::next

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

Questo fondamentalmente dietro le quinte aumenta ofstanche i tempi.

L' std::setha iteratori bidirezionali , che non ha lussi come iteratori ad accesso casuale , e quindi necessario incremento simili.


Detto questo, potresti sovraccaricare operator+(e forse operator-) per gli iteratori bidirezionali, che però non saranno consigliati .