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 ;
}

 

posted @ 2012-05-02 22:03  crazylhf  阅读(203)  评论(0)    收藏  举报