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

나에게 * 두 개의 반복자 사이의 모든 요소를 ​​계산 * 요소의 값을 얻고 그들을 합산하는 것과 같은 소리는'누적된다. 당신이 알고 자하는 것이 * 범위 내에 몇 개의 요소가 있는지 * 당신이 질문 제목을 바꾸면 유익 할 것이라고 생각합니다. –

답변

25

범위의 모든 요소를 ​​계산하려는 경우. 다음은 <iterator> 헤더에서,과 같이, std::distance를 사용할 수 있습니다

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

그것은 충분합니다.

처음과 마지막 사이의 요소의 수를 계산합니다 :

online docstd::distance에 대해 말한다.

+0

여기에 누락 된 C++ 11 태그가 없으면 편집이 잘못되었습니다 – davidhigh

+4

@davidhigh : 2015 년이며 C++ 14가 릴리스되므로 다른 버전이 언급되지 않는 한 C++의 기본 의미는 C++ 14 여야합니다. – Nawaz

관련 문제