c++ - 只计算递增次数的输出迭代器?

标签 c++ boost stl iterator

在STL/Boost中,有没有现成的只计算自增次数的输出迭代器?当算法执行 *iter = value 时,该值将被简单地丢弃。

如果没有,那么滚动我自己的似乎很容易。尽管如果有人发布了此类迭代器的示例,它可能对其他人有用。

最佳答案

标准 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() 将被调用并且计数器将递增。

希望这对您有所帮助!

关于c++ - 只计算递增次数的输出迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4999588/

相关文章:

c++ - 给定一棵二叉树和一个总和,确定这棵树是否有一条从根到叶的路径,使得路径上的所有值相加等于给定的总和

c++ - 将派生类对象存储在基类变量中

c++ - 将 vector 传递给函数并返回 vector 并重铸

c++ - 在 C++ 中使用 multimap 类创建数据库类

c++ - Qt 将应用程序对齐到屏幕的左上角

c++ - Visual Studio 2010 中的 boost::thread 编译错误

c++ - Boost 状态机语言 - 来自 `post` 的 `action` 事件

c++ - 为什么将 boost::swap 中的 swap_impl 移至单独的命名空间?

C++ 模板 : Coding error or compiler bug?

c++ - C++17 中的 std::back_insert_iterator