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