Comment parcourir std :: set en fonction de l'offset de set.begin ()?

Aug 20 2020

J'ai besoin d'un itérateur basé sur le décalage.

c'est-à-dire avoir l'itérateur pour begin:

auto it = set.begin()

Je dois accéder à l'itérateur ayant offset ofst:

it + ofst

Y-a-t-il un moyen de faire ça? de J'ai besoin d'augmenter progressivement it++les ofsttemps d' itérateur .

Réponses

5 JeJo Aug 20 2020 at 08:21

Je dois accéder à l'itérateur ayant offset ofst:: it + ofsty a-t-il un moyen de le faire?

Non, il n'y a pas de operator+surcharge définie pour cela pour std::set::iterator(aka itérateurs bidirectionnels ). Cependant, vous pouvez utiliser std::next, à partir de l'en- tête, comme suit pour obtenir le même.

#include <iterator>  // std::next

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

Ceci fondamentalement derrière la scène incrémente les ofsttemps aussi.

Le std::seta des itérateurs bidirectionnels , qui n'ont pas de luxe comme les itérateurs à accès aléatoire , et doivent donc s'incrémenter comme ça.


Cela étant dit, vous pourriez surcharger le operator+(et peut-être operator-) pour les itérateurs bidirectionnels, ce qui ne sera cependant pas recommandé .