จะวนซ้ำ std :: set ตาม offset จาก set.begin () ได้อย่างไร?

Aug 20 2020

ฉันต้องการตัววนซ้ำตามออฟเซ็ต

กล่าวคือมีตัววนซ้ำสำหรับการเริ่มต้น:

auto it = set.begin()

ฉันต้องไปที่ iterator โดยมี offset ofst:

it + ofst

มีวิธีทำไหม? ของฉันต้องการเพิ่มเวลาตัวit++วนซ้ำทีละน้อยofst

คำตอบ

5 JeJo Aug 20 2020 at 08:21

ฉันต้องไปที่ iterator โดยมี offset ofst:: it + ofstมีวิธีทำไหม

ไม่ไม่มีการoperator+โอเวอร์โหลดที่กำหนดไว้สำหรับstd::set::iterator(aka ตัวทำซ้ำสองทิศทาง ) อย่างไรก็ตามคุณสามารถใช้std::nextจากส่วนหัวดังต่อไปนี้เพื่อให้ได้สิ่งเดียวกัน

#include <iterator>  // std::next

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

โดยพื้นฐานแล้วเบื้องหลังฉากนี้จะเพิ่มขึ้นเรื่อยofstๆ เช่นกัน

std::setมีiterators สองทิศทางที่มีความหรูหราไม่เหมือนใครiterators เข้าถึงแบบสุ่มและด้วยเหตุนี้จำเป็นที่จะต้องเพิ่มขึ้นเช่นนี้


ที่ถูกกล่าวว่าคุณอาจจะเกินพิกัดoperator+(และอาจจะoperator-) สำหรับ iterators สองทิศทางซึ่งจะไม่ได้รับการแนะนำว่า