set.begin()からのオフセットに基づいてstd :: setを繰り返す方法は?
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::nextから、を使用し
#include <iterator> // std::next
auto nthIter = std::next(it, ofst);
これは基本的に舞台裏でofstも時間を増やします。
にstd::setは双方向イテレータがあり、ランダムアクセスイテレータのような贅沢はないため、このようにインクリメントする必要があります。
そうは言っても、双方向イテレータのoperator+(そしておそらくoperator-)過負荷になる可能性がありますが、これはお勧めしません。