提问者:小点点

在2个集合中有n个元素,我必须遍历它们,这样在每次迭代中,我得到当前元素,也得到下一个元素


下面是我写的代码,它显示错误(我们不能使用end()-1和itr+1操作)。我的目的是一对一对地看完布景。我想要得到{1 2}{2 3}。

    for(itr=X.begin();itr!=X.end()-1;itr++) 
    {
        int l1,l2;
        l1 = *(itr+1) - *itr;
        for(itr1=Y.begin();itr1!=Y.end()+1;itr1++)
        {

            l2 = *(itr1+1) - *itr1;
            
            int l = min(l1,l2);
            int num = (l*l)/(a*a);
            
            count += num;
        }
    }   

共1个答案

匿名用户

集迭代器不支持+-。这似乎是做你想做的最简单的方法

std::set<int> X = ...;
auto i = X.begin();
if (i != X.end())
{
    auto j = ++i;
    while (j != X.end())
    {
        int l1 = *j - *i;
        ...
        // similar code for Y loop
        ...
        ++i;
        ++j;
    }
}

它与您的代码基本相同,但在一个循环中使用了两个相邻的迭代器ij,以避免不得不使用+-