增加迭代器c ++

时间:2013-02-12 12:49:30

标签: c++ iterator increment

我的问题如下:我使用迭代器,我想将每个元素与下一个元素进行比较。原型如下所示,如何增加迭代器才能进行比较? 另外,我怎样才能为此设置一个合适的条件?我的意思是如何指向最后一个元素,而不是在最后一个元素之后使用end()函数:

std::vector<T>::const_iterator it;
std::vector<T>::const_iterator it2;
for (it = set.begin(), it != set.end(); it++)
{
  // some things happen
  if ( final == it )
  {
     if ( it != set.end()-1 ) // how to write properly condition?
     {
        it2 = it + 1; //how to assign the next here?
        if (...)//some condition
        {
          if ( it->func1() - it2->func1()) < 20 ) //actual comparison of two consecutive element values
            // do something
        }
      }
   }
}

5 个答案:

答案 0 :(得分:3)

C ++ 11 中使用函数std::next()std::prev()

您的代码可能会变成:

// before
it != std::set.end()-1

// after
it != std::prev(set.end())

// before
it2 = it + 1;

// after
it2 = std::next(it);

对于非矢量容器也是如此,例如map,set或其他容器。

注意:在std::next(it)之后,&#34;它&#34;迭代器保持不变!

注2:使用it2 = std::next(it,n);根据需要增加。

答案 1 :(得分:2)

您可以使用adjacent_find来解决这个问题。你应该使用该函数的第二种形式(带谓词)并将c {tor中的some things happensome condition传递给谓词

auto found = std::adjacent_find( set.begin(), set.end(),
    [some_comdition]( const T & left, const T & right ) {
        if ( some_comdition ) {
            if ( left.func1() - right.func1() < 20 ) {
                do_smth();
                // return true; if there's no need to continue
            }
        }
        return false;
    }
);

答案 2 :(得分:1)

基于it++可接受的事实,我们应该定义一个名为itplusone的新迭代器,它被初始化为itplusone = ++it。通过这种方式,您可以安全地使用指向it的下一项的迭代器的含义。同样很明显,itplusone的迭代器范围由术语itplusone != set.end()限定。我使用此方法计算路径的总权重,该路径定义为列表对象。

答案 3 :(得分:0)

有点晚了,才发现它,但是就像上面提到的,++迭代器可以正常工作。

.docx

答案 4 :(得分:-1)

for循环中,您使用it++,这意味着it = it + 1,这是完全正常的。所以这个也可以it2 = it + 1it2将指向下一个值。

再次在for循环中,您使用it != set.end(),这也完全可以。所以您也可以it + 1 < set.end(),就像您在代码中所做的那样。

我的代码中没有任何错误,只是想解释一下。