你不能简单地使用它!
如果将迭代器类型声明为模板,则可以这样:
template <typename Itr>
BigInteger(Itr begin, Itr end)
{
}
或者
BigInteger(std::vector<int>::iterator begin, std::vector<int>::iterator end)
{
}
但是,怎么样std::iterator
。嗯,std::iterator
是一个模板类,你应该提供它的参数,你应该从它派生
class MyItr : public std::iterator<std::input_iterator_tag, int>
{
...
};
BigInteger(MyItr begin, MyItr end)
{
}
说来话长!一个可能的定义std::iterator
是
template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,
typename _Pointer = _Tp*, typename _Reference = _Tp&>
struct iterator
{
typedef _Category iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Pointer pointer;
typedef _Reference reference;
};
如您所见,它只是一个带有一些typedef
s 的空类。因此,您必须为派生迭代器实现operator*()
, operator->()
, begin()
, end()
, ... 。