, OP .
, std::vectors T [], T = byte = unsigned char.
, , . :
** , , , **
class iterator
{
public :
virtual iterator & operator -- () = 0;
virtual iterator & operator -- (int) = 0;
virtual iterator & operator ++ () = 0;
virtual iterator & operator ++ (int) = 0;
virtual iterator & operator += (int n) = 0;
virtual iterator & operator -= (int n) = 0;
virtual bool operator == (const iterator & o) = 0;
virtual bool operator != (const iterator & o) = 0;
};
, :
class ptr_iterator : public iterator
{
public :
ptr_iterator() : m_p(NULL) {}
ptr_iterator(byte * b) : m_p(b) {}
iterator & operator = (const ptr_iterator &o)
{ m_p = o.m_p; return *this; }
iterator & operator = (byte * b)
{ m_p = b; return *this; }
virtual iterator & operator -- ()
{ --m_p; return *this; }
virtual iterator & operator -- (int)
{ m_p--; return *this; }
virtual iterator & operator ++ ()
{ ++m_p; return *this; }
virtual iterator & operator ++ ()
{ m_p++; return *this; }
virtual iterator & operator += (int n)
{ m_p += n; return *this; }
virtual iterator & operator -= (int n)
{ m_p -= n; return *this; }
virtual bool operator == (const iterator & o)
{ return ((ptr_iterator*)&o)->m_p == m_p; }
virtual bool operator != (const iterator & o)
{ return ((ptr_iterator*)&o)->m_p != m_p; }
private :
byte * m_p;
};
, , std::vector
class std_iterator:
{ typedef typename C:: iterator c_iterator; : = (const c_iterator i) {m_it = i; return * this; } = (const std_iterator o) {m_it = o.m_it; return * this; }
virtual iterator & operator ++ ()
{ ++m_it; return *this; }
virtual iterator & operator ++ (int)
{ m_it++; return *this; }
virtual iterator & operator -- ()
{ --m_it; return *this; }
virtual iterator & operator -- (int)
{ m_it--; return *this; }
virtual iterator & operator += (int n)
{ m_it += n; return *this; }
virtual iterator & operator -= (int n)
{ m_it -= n; return *this; }
virtual bool operator == (const iterator &o)
{ return ((std_iterator*)&o)->m_it == m_it; }
virtual bool operator != (const iterator &o)
{ return ((std_iterator*)&o)->m_it != m_it; }
bool operator == (const c_iterator &i)
{ return m_it == i; }
bool operator != (const c_iterator &i)
{ return m_it != i; }
:
c_iterator m_it;
};
, .
, :
int DoStuff(iterator &it);
- . , , - :)
, :
std_iterator > it = my_vector.begin();//
std_iterator > other = it;//
int DoStuff(iterator &it)
{
iterator a = it + 2;
return 0;
}