使用 std::vector 迭代器在开始附近循环

Looping back near the beggining using std::vector iterators

我有一个迭代器,每当它到达终点时,它需要在向量的开头附近循环,因为它超过了终点,就像这样:

std::vector<int> vec = {...}, vec1;
std::vector<int>::iterator it = vec.begin();

for(;vec.size() != 0;){

it += k; //k is a const integer
if(it >= vec.end()){
it -= items.end(); // something like that, but this syntax is obviously invalid
}

vec1.push_back(*it);
it = vec.erase(it);
}

所以也许我将 vec{1,2,3,4,5} 增加 3,它应该先删除 3,然后删除 1 并将它们放入 vec1,从某种意义上说,它循环了但是当它到达末尾时被留下.我尝试了一堆不同的语法,但总是出现类型不匹配错误。有没有一种优雅的方式来做到这一点?

XY 解决方案:我建议保留索引而不是迭代器并使用余数运算符。

for(std::size_t i = 0; vec.size() != 0;){
    i = (i + k) % vec.size();
    vec1.push_back(vec[i]);
    vec.erase(vec.begin() + i);
}

So perhaps I increment vec{1,2,3,4,5} by 3, it should first remove 3

这与您尝试的代码不符。如果将第一个元素的迭代器递增 3 并将其擦除,那么您将擦除值为 4 的元素。