จะวนซ้ำ 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 สองทิศทางซึ่งจะไม่ได้รับการแนะนำว่า