输出迭代器只计算增量数?

时间:2011-02-15 03:17:40

标签: c++ boost stl iterator

在STL / Boost中,是否有一个现成的输出迭代器,它只计算它递增的次数?当算法*iter = value时,该值将被丢弃。

如果没有,那么滚动我自己似乎很容易。如果有人发布了这样一个迭代器的例子,那么对其他人可能会有用。

2 个答案:

答案 0 :(得分:4)

标准C ++中不存在这样的迭代器,据我所知,没有Boost迭代器具有这种确切的功能。但是,有很多方法可以使用这些库来实现这一点,而不必使用自己的库。例如,使用Boost的function_output_iterator,您可以构建一个这样的计数器:

struct Counter {
    size_t* out;

    explicit Counter(size_t* where) : out(where) {
        // Handled in initializer list
    }

    /* Either make this a template, or make the class itself a template. */
    template <typename T> void operator()(T& value) {
        ++ *out;
    }
};

这个函子类型接受一个指向计数器变量的指针,然后每当调用它operator()时递增计数器。如果你将它包装在function_output_iterator中,如下所示:

size_t count;
your_algorithm(begin, end,
              boost::make_function_output_iterator(Counter(&count)));

然后每当写入创建的迭代器时,您的operator()将被调用,计数器将递增。

希望这有帮助!

答案 1 :(得分:-2)

是的。在提升:

The counting iterator