Wie iteriere ich std :: set basierend auf dem Offset von set.begin ()?

Aug 20 2020

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

5 JeJo Aug 20 2020 at 08:21

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 Kopfzeile Folgendes verwenden, um dasselbe zu erreichen.

#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 .