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

C++ 只计算增量数量的输出迭代器?,c++,boost,stl,iterator,C++,Boost,Stl,Iterator,在STL/Boost中,是否有一个现成的输出迭代器,只计算其递增的次数?当算法执行*iter=value时,该值将被丢弃 如果不是,那我自己滚似乎很容易。虽然如果有人发布了这样一个迭代器的例子,它可能对其他人有用。没有这样的迭代器存在于标准C++中,而且据我所知,没有升压迭代器有这种精确的功能。不过,有很多方法可以通过使用这些库来实现这一点,而不必使用自己的库。例如,使用Boost的函数\u output\u迭代器,可以构建如下计数器: struct Counter { size_t*

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


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

没有这样的迭代器存在于标准C++中,而且据我所知,没有升压迭代器有这种精确的功能。不过,有很多方法可以通过使用这些库来实现这一点,而不必使用自己的库。例如,使用Boost的

函数\u output\u迭代器
,可以构建如下计数器:

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;
    }
};
然后,无论何时写入所创建的迭代器,都将调用
操作符()
,计数器将递增

希望这有帮助

是的。在boost中:


你想用它做什么?你能想出一个例子吗?有
std::count()
std::count\u if()
。wilhelm:假设我有一个算法,
findArticulations
,它通过输出迭代器输出图形中的关节点。我想编写另一个算法
isBiconnected
,它利用现有的
findArticulations
@wilhelmtell:是的,我想
std::count
可以在我的示例中工作,但它需要不必要地将连接点复制到临时容器中,只进行计数。有
boost::counting\u迭代器
,但我不确定它是否符合您的要求。它使用
运算符*
+1生成计数,我打赌有一种方法可以使用boost lambdas将其转换为一行。@Emile Cormier-我还没有测试过这一点,但可能类似于
boost::bind(+++*\u 1,&count)
?这对我有用:
std::copy(ar.begin(),ar.end(),boost::make\u函数\u输出迭代器(++boost::da::lambvar(n)));@Emile Cormier:酷!或者,您可以完成
[&count](/*…type…*/){++count}
:-)的整个C++0x事务我要等待C++大师在试图把我的头包裹在那些新的lambdas之前完成C++ 0x规范。
size_t count;
your_algorithm(begin, end,
              boost::make_function_output_iterator(Counter(&count)));