函数与advance类似,返回迭代器

function similar to advance that returns an iterator?

本文关键字:返回 迭代器 类似 advance 函数      更新时间:2023-10-16

是否有类似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,这对我正在使用的一些迭代器不起作用,这迫使我目前使用std::advance。有更干净的方法吗?

是的,它叫做std::next。它不修改参数

您可以使用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;
    },