Сколько элементов существует между двумя итераторами - PullRequest
14 голосов
/ 09 октября 2011

Какой лучший способ подсчитать все элементы в итераторе?

Я хочу код, эквивалентный этому

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), но, может быть, есть что-то более ясное.

1 Ответ

25 голосов
/ 09 октября 2011

Если вы хотите посчитать все элементы в диапазоне. тогда вы можете использовать std::distance из заголовка <iterator>, например:

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

Этого должно быть достаточно.

В онлайн-документе говорится о std::distance:

Вычисляет количество элементов между первым и последним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...