【问题标题】:C++ modulo iterator in loop循环中的 C++ 模迭代器
【发布时间】:2015-11-02 12:09:24
【问题描述】:

有没有办法可以写这个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 + 1 == vec.end() ? vec.begin() : it + 1

标签: c++ for-loop iterator


【解决方案1】:

如果我这样做,我想我会写

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

【讨论】:

    【解决方案2】:

    您可以使用三元 ?: 运算符并选择 beginit + 1,具体取决于当前的 it 迭代器是否指向末尾之前的元素:

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

    Live demo

    【讨论】:

    • 像魅力一样工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2015-07-04
    • 1970-01-01
    • 2012-01-21
    • 2016-01-02
    相关资源
    最近更新 更多