2011-10-09 16 views
12

Yineleyicideki tüm öğeleri saymanın en iyi yolu nedir?İki yineleyici arasında kaç öğe var

Bu

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()); 

Bunu yapmanın en iyi yolu nedir kod eşdeğer istiyor?

boost::lambda::constant(true) kullanabilirim, ancak daha net bir şey olabilir.

+2

Neden std :: distance' kullanmıyorsunuz? – Vinzenz

+0

@Vinzenz Aradığım şey buydu ... Thaks –

+0

Bana göre * iki yineleyici arasındaki tüm öğeleri sayın *, elemanların değerlerini elde etmek ve onları biriktirmek gibi sesler biriktirir; Eğer bilmek istediğiniz şey ise * o alanda kaç eleman var * soru başlığını değiştirirseniz bunun fayda sağlayacağını düşünüyorum. –

cevap

25

Bir aralıktaki tüm öğeleri saymak isterseniz. o zaman <iterator> başlığından, şöyle, std::distance kullanabilirsiniz:

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

Bu yeterli olmalı.

ilk ve son arasındaki elemanlarının sayısını hesaplar:

online docstd::distance hakkında diyor.

+0

düzenleme burada eksik bir C++ 11 etiketi olmadan yanlıştır – davidhigh

+4

@davidhigh: Bu 2015 ve C++ 14 yayınlandı, bu nedenle C++ 'nin varsayılan anlamı, aksi belirtilmedikçe C++ 14 olmalıdır. – Nawaz

İlgili konular