2011-10-09 34 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