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

Syn*_*ose 1 c++ stl c++11

是否有类似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;
        },
Run Code Online (Sandbox Code Playgroud)

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;
        },
Run Code Online (Sandbox Code Playgroud)

重要的是要注意我不能这样做part_begin + count,这对我正在使用的一些迫使我当前使用的迭代器不起作用std::advance.有没有更干净的方式这样做?

Jos*_*eld 6

是的,它被称为std::next.它不会修改其参数.


nos*_*sid 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;
    },
Run Code Online (Sandbox Code Playgroud)