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-)過負荷になる可能性がありますが、これはお勧めしません。