2011-10-09 6 views
12

イテレータのすべての要素を数える最も良い方法は何ですか?2つのイテレータの間にいくつの要素がありますか

私はこの

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それは私が探していたものです。タックス –

+0

私には2つのイテレータ間のすべての要素を数えます*要素の値を取得し、それらを合計して 'accumulate'のように聞こえます。あなたが知りたいことが*範囲内にいくつあるのか*あなたが質問のタイトルを変更した場合、それが有益だろうと思う。 –

答えて

25

範囲内のすべての要素を数えたい場合。

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

それが十分でなければなりません:あなたはそうのように、<iterator>ヘッダから、std::distanceを使用することができます。

online docstd::distanceを言う:

は、最初と最後の間の要素の数を計算します。

+0

ここではないC++ 11タグなしで編集が間違っている – davidhigh

+4

@davidhigh:これは2015年であり、C++ 14がリリースされているので、C++のデフォルトの意味はC++ 14でなければなりません。 – Nawaz

関連する問題