Wie iteriere ich std :: set basierend auf dem Offset von set.begin ()?
Ich brauche einen Iterator basierend auf dem Offset.
dh mit dem Iterator beginnen:
auto it = set.begin()
Ich muss zum Iterator mit Offset gelangen ofst:
it + ofst
Gibt es eine Möglichkeit, das zu tun? Ich muss it++die Iteratorzeiten schrittweise erhöhen ofst.
Antworten
Ich muss Iterator bekommen versetzt zu haben
ofst:it + ofst: Gibt es eine Möglichkeit , das zu tun?
Nein, hierfür ist keine operator+Überladung definiert std::set::iterator(auch bekannt als bidirektionale Iteratoren ). Sie können jedoch std::nextaus der
#include <iterator> // std::next
auto nthIter = std::next(it, ofst);
Dies erhöht ofstim Grunde genommen auch die Zeiten hinter den Kulissen .
Der std::sethat bidirektionale Iteratoren , die keinen Luxus wie Iteratoren mit wahlfreiem Zugriff haben und daher wie folgt inkrementiert werden müssen.
Davon abgesehen könnten Sie die operator+(und möglicherweise operator-) für die bidirektionalen Iteratoren überladen , was jedoch nicht empfohlen wird .