2011-10-09 36 views
12

计算迭代器中所有元素的最佳方法是什么?两个迭代器之间有多少个元素

我想代码等同于这个

template<typename T,typename S,S val> 
struct ConstantFunctor : unary_function<T,S> 
{S operator()(const T&) const {return val;}}; 
template<typename T> 
struct TrueFunctor : ConstantFunctor<T,bool,true>{}; 
... 
count_if(c.begin(),c.end(),TrueFunctor()); 

什么是做到这一点的最好方法是什么?

我可以使用boost::lambda::constant(true),但也许有一些清晰。

+2

你为什么不使用'的std :: distance'? – Vinzenz

+0

@Vinzenz这就是我正在寻找... Thaks –

+0

对我来说*计算两个迭代器之间的所有元素*听起来像获取元素的值并将它们总结起来,即“accumulate”。如果你想知道的是*范围内有多少元素*我认为如果你改变问题标题会有好处。 –

回答

25

如果你想计算一个范围内的所有元素。那么你可以使用std::distance,从<iterator>头,就像这样:

int count = std::distance(begin(c), end(c)); 

它应该是足够的。

online doc说,大约std::distance

计算第一个和最后之间的元素数量。

+0

编辑是错误的,没有C++ 11标记,这里是缺少的 – davidhigh

+4

@davidhigh:这是2015年,并且C++ 14被发布,因此C++的默认含义应该是C++ 14,除非另有提及版本。 – Nawaz