2012-10-18 60 views
0

我有一个函数在参数中使用一个常量迭代器,我想对该函数进行递归调用,但是递增了我的迭代器(不修改迭代器本身)。递增一个常数foward迭代器

我发现的唯一解决方案是创建一个迭代器的副本,并预先递增该副本,最终将其作为函数调用的参数传递。

func(const FowardIterator & i, const container & c) { 
    // lot of very smart code 

    FowardIterator next = i; 

    ++next; 
    func(next, c); 
} 

有没有更简单的方法来做到这一点,一个不涉及创建一个临时迭代器?

+2

你应该值反正通过迭代器。 –

+0

前向迭代器是否有operator ++(int)?如果它确实那么func(i + 1,c)呢? – Grzegorz

+0

STL Foward迭代器不支持i + n,只有随机访问迭代器可以。 – tomahh

回答

1

迭代器应该是非常快的复制,所以真的没有理由接受const&;按值传递应该没问题,并且可以避免在函数体中显式复制迭代器。

这就是说,你还可以使用std::next复制一个迭代器,并事先把一切都步:

func(std::next(i), c);