函数类似于advance返回迭代器?

时间:2014-06-23 17:53:44

标签: c++ c++11 stl

是否有类似advance的函数,但会返回迭代器而不是void返回类型?我希望有一个函数调用,如:

//...
[&value](InIter part_begin, std::size_t part_count)
        {
            difference_type ret = 
                std::count(part_begin, std::advance(part_begin,count), value);
            return ret;
        },

但advance是一个void返回类型函数,所以我现在正在做

//...
[&value](InIter part_begin, std::size_t part_count)
        {
            InIter end = part_begin;
            std::advance(end,part_count);
            difference_type ret = std::count(part_begin, end, value);
            return ret;
        },

重要的是要注意我不能只做part_begin + count,这对我正在使用的某些迭代器不起作用,迫使我当前使用{{1} }}。有没有更干净的方法呢?

2 个答案:

答案 0 :(得分:6)

是的,它被称为std::next。它没有修改它的论点。

答案 1 :(得分:5)

您可以使用std::next来获取由给定数量的元素提前的迭代器。与std::advance相反,std::next不会更改传递的迭代器本身。

[&value](InIter part_begin, std::size_t count) {
        difference_type ret = 
            std::count(part_begin, std::next(part_begin,count), value);
        return ret;
    },