c++循环中的模迭代器

C++ modulo iterator in loop

本文关键字:迭代器 循环 c++      更新时间:2023-10-16

我是否可以写这个for循环

vector<int> vec{1,2,3,4,5,6};
for (int i=0; i<vec.size(); ++i)
    float result = vec[i]-vec[(i+1)%vec.size()];//Subtract vec[0] from vec[5] in last iteration. 

在带有迭代器的版本中?因此,像这样:

vector<int> vec{1,2,3,4,5,6};
for (vector<int>::iterator it=vec.begin(); it!=vec.end(); ++it)
    float result = *it - *((it+1)%vec.size());

您可以使用三元?:操作符,根据当前it迭代器是否指向结束前的元素,选择beginit + 1:

for (auto it = vec.begin(); it != vec.end(); ++it) {
    float result = *it - *((it + 1 == vec.end()) ? vec.begin() : it + 1);
}

现场演示

如果我要那样做的话,我想我会写

for (auto i1 = vec.end() - 1, i2 = vec.begin(); i2 != vec.end(); i1 = i2++) {
    result = *i1 - *i2;
}