В стандарте C ++ такого итератора не существует, и, насколько мне известно, ни один итератор Boost не обладает такой точной функциональностью. Однако существует множество способов сделать это с помощью этих библиотек, не катая свои собственные. Например, используя Boost's function_output_iterator
, вы можете построить счетчик, например так:
struct Counter {
size_t* out;
explicit Counter(size_t* where) : out(where) {
// Handled in initializer list
}
/* Either make this a template, or make the class itself a template. */
template <typename T> void operator()(T& value) {
++ *out;
}
};
Этот тип функтора принимает указатель на переменную счетчика, а затем всякий раз, когда вызывается его operator()
, увеличивается счетчик. Если вы затем оберните это в function_output_iterator
, как показано здесь:
size_t count;
your_algorithm(begin, end,
boost::make_function_output_iterator(Counter(&count)));
Затем, когда записывается созданный итератор, ваш operator()
будет вызываться, а счетчик будет увеличиваться.
Надеюсь, это поможет!