Bagaimana cara mengulang std :: set berdasarkan offset dari set.begin ()?

Aug 20 2020

Saya perlu mendapatkan iterator berdasarkan offset.

yaitu memiliki iterator untuk memulai:

auto it = set.begin()

Saya perlu menuju ke iterator yang memiliki offset ofst:

it + ofst

Apakah ada cara untuk melakukannya? dari saya perlu peningkatan tambahan it++waktu iterator ofst.

Jawaban

5 JeJo Aug 20 2020 at 08:21

Aku harus pergi ke iterator setelah diimbangi ofst: it + ofst: apakah ada cara untuk melakukan itu?

Tidak, tidak ada operator+kelebihan beban yang ditentukan untuk ini std::set::iterator(alias iterator dua arah ). Namun, Anda dapat menggunakan std::next, dari header sebagai berikut untuk mencapai yang sama.

#include <iterator>  // std::next

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

Ini pada dasarnya juga meningkatkan ofstwaktu di belakang layar .

The std::setmemiliki iterator dua arah , yang tidak memiliki kemewahan seperti iterator random access , dan karenanya perlu peningkatan seperti ini.


Karena itu, Anda bisa membebani operator+(dan mungkin operator-) untuk iterator dua arah, yang tidak akan direkomendasikan .