C++实现迭代器
制定迭代器协议:
# ifndef _CIterator_h
# define _CIterator_h
template < class Object >
class CIterator {
public:
virtual ~CIterator( ) { }
virtual bool hasNext( ) const = 0 ;
virtual const Object& next( ) = 0 ;
} ;
# endif
应用迭代器:
# include <vector>
# include "CIterator.h"
using std::vector ;
template < class Obj >
class MyVector : public vector < Obj > {
private:
class MyVecIterator : public CIterator < Obj > {
private:
const MyVector < Obj > & m_vecp ;
int cur ;
public:
MyVecIterator( const MyVector& myvec )
: m_vecp( myvec ), cur( 0 ) { }
bool hasNext( ) const
{ return cur < m_vecp.size() ; }
const Obj& next( )
{ return m_vecp[cur++] ; }
} ;
public:
CIterator < Obj > * getIterator( )
{ return new MyVecIterator( *this ) ; }
} ;
测试用例:
# include <iostream>
# include "CIterator.h"
# include "MyVector.h"
using std::cin ;
using std::cout ;
int main( int argc , char **argv )
{
MyVector < int > myvec ;
int num = 0 ;
cout << "输入容器尺寸:" ;
if( cin >> num )
{
while( num-- )
{
int data ;
if ( cin >> data )
{
myvec.push_back( data ) ;
}
}
cout << "迭代输出向量中的内容:\n" ;
CIterator < int > *iter = myvec.getIterator( ) ;
while( iter -> hasNext( ) )
{
cout << iter -> next( ) << " " ;
}
delete iter ;
cout << std::endl ;
}
return 0 ;
}

浙公网安备 33010602011771号