Как выполнить итерацию std :: set на основе смещения из set.begin ()?

Aug 20 2020

Мне нужно получить итератор по смещению.

т.е. имея итератор для начала:

auto it = set.begin()

Мне нужно добраться до итератора со смещением ofst:

it + ofst

Есть способ сделать это? мне нужно постепенное увеличение it++времени итератора ofst.

Ответы

5 JeJo Aug 20 2020 at 08:21

Мне нужно добраться до итератора со смещением ofst:: it + ofstесть ли способ сделать это?

Нет, operator+для этого не задана перегрузка std::set::iterator(также известная как двунаправленные итераторы ). Однако вы можете использовать std::nextfrom header следующим образом, чтобы добиться того же.

#include <iterator>  // std::next

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

Это в основном за кулисами ofstтоже увеличивает время.

У std::setнего есть двунаправленные итераторы , в которых нет излишеств, таких как итераторы с произвольным доступом , и, следовательно, его необходимо увеличивать таким образом.


При этом вы можете перегрузить operator+(и, возможно, operator-) двунаправленные итераторы, что, однако, не рекомендуется .