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

Emi*_*ier 5 c++ boost iterator stl

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

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

tem*_*def 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;
    }
};
Run Code Online (Sandbox Code Playgroud)

该仿函数类型接受一个指向计数器变量的指针,然后每当operator()调用它时都会递增计数器。如果您随后将其包装在 a 中function_output_iterator,如下所示:

size_t count;
your_algorithm(begin, end,
              boost::make_function_output_iterator(Counter(&count)));
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助!