【问题标题】:I have n number of elemet in the 2 sets and i have to go through them such that at each iteration i get the current element ans also the next element我在 2 个集合中有 n 个元素,我必须遍历它们,以便在每次迭代中我得到当前元素和下一个元素
【发布时间】:2023-03-19 19:12:01
【问题描述】:

下面,我写的代码是否显示错误(我们不能使用 end()-1 和 itr+1 操作)。 我的目的是成对地通过集合。例如 X[1 2 3] 我想得到 {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;
        }
    }   

【问题讨论】:

  • 请提供完整的代码,当您说您只想迭代数组以获得对时,我不明白您想通过计算来实现什么。
  • 在标题中你说set 在你说array 的问题中,是哪个?假设您确实是故意设置,请参阅下面的答案。

标签: c++ pointers iterator set


【解决方案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,以避免使用 +-

【讨论】:

  • 当您发布答案时,我正要说,为什么不使用两个迭代器。
  • 是的,我试图做同样的事情,但我可以使用 end()-- 而不是 end()-1 并且在我上面的代码中与 itr 相同,它会工作吗?但是谢谢你的答案,这就是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2011-04-18
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多