Как выполнить итерацию std :: set на основе смещения из set.begin ()?
Мне нужно получить итератор по смещению.
т.е. имея итератор для начала:
auto it = set.begin()
Мне нужно добраться до итератора со смещением ofst
:
it + ofst
Есть способ сделать это? мне нужно постепенное увеличение it++
времени итератора ofst
.
Ответы
Мне нужно добраться до итератора со смещением
ofst
::it + ofst
есть ли способ сделать это?
Нет, operator+
для этого не задана перегрузка std::set::iterator
(также известная как двунаправленные итераторы ). Однако вы можете использовать std::nextfrom
#include <iterator> // std::next
auto nthIter = std::next(it, ofst);
Это в основном за кулисами ofst
тоже увеличивает время.
У std::set
него есть двунаправленные итераторы , в которых нет излишеств, таких как итераторы с произвольным доступом , и, следовательно, его необходимо увеличивать таким образом.
При этом вы можете перегрузить operator+
(и, возможно, operator-
) двунаправленные итераторы, что, однако, не рекомендуется .