64,648
社区成员
发帖
与我相关
我的任务
分享
#include< iostream >
using namespace std;
template< class T >
class ostream_iterator
{
public:
ostream_iterator( ostream & os, const char * s ):strm( & os ), str( s ){}
ostream_iterator & operator ++()
{
return * this;
}
ostream_iterator & operator ++( int )
{
return * this;
}
ostream_iterator & operator *()
{
return * this;
}
ostream_iterator & operator = ( const T & t )
{
* strm << t << str;
return * this;
}
private:
ostream * strm;
const char * str;
};
template< class T >
class istream_iterator
{
friend int operator == ( istream_iterator< T > & p, istream_iterator< T > & q );
public:
istream_iterator( istream & is ) : strm( & is ), full( 0 ), eof( 0 ){}
istream_iterator() : strm( 0 ), full( 0 ), eof( 1 ){}
istream_iterator & operator ++()
{
full = 0;
return * this;
}
istream_iterator operator ++( int )
{
istream_iterator r = * this;
full = 0;
return r;
}
T operator *()
{
fill();
return buffer;
}
private:
T buffer;
istream *strm;
int full;
int eof;
void fill()
{
if( ! full && ! eof )
{
if( * strm >> buffer )
{
full = 1;
}
else
{
eof = 1;
}
}
}
};
template< class T>
int operator == ( istream_iterator< T > & p, istream_iterator< T > & q )
{
if( p.eof && q.eof )
return 1;
if( ! p.eof && ! q.eof )
return( & p == & q );
p.fill();
q.fill();
return ( p.eof == q.eof );
}
template< class T >
int operator != ( istream_iterator< T > & p, istream_iterator< T > & q )
{
return !( p == q );
}
template< class P, class T >
void Copy( P start, P end, T t )
{
while( start != end )
{
* t ++ = * start ++;
}
}
int main( int argc, char * argv[] )
{
ostream_iterator< int > output ( cout, "\n" );
istream_iterator< int > input( cin );
istream_iterator< int > eof;
Copy( input, eof, output );
}
ostream_iterator & operator ++( int )
{
return * this;
}
friend int operator == ( istream_iterator< T > & p, istream_iterator< T > & q );
friend int operator == < T > ( istream_iterator< T > & p, istream_iterator< T > & q );
#include< iostream >
using namespace std;
template< class T >
class ostream_iterator
{
public:
ostream_iterator( ostream & os, const char * s ): strm( & os ), str( s ) {}
ostream_iterator & operator ++()
{
return * this;
}
ostream_iterator & operator ++( int )
{
return * this;
}
ostream_iterator & operator *()
{
return * this;
}
ostream_iterator & operator = ( const T & t )
{
* strm << t << str;
return * this;
}
private:
ostream * strm;
const char * str;
};
template< class T >
class istream_iterator
{
friend int operator == <>( istream_iterator< T > & p, istream_iterator< T > & q );
public:
istream_iterator( istream & is ) : strm( & is ), full( 0 ), eof( 0 ) {}
istream_iterator() : strm( 0 ), full( 0 ), eof( 1 ) {}
istream_iterator & operator ++()
{
full = 0;
return * this;
}
istream_iterator operator ++( int )
{
istream_iterator r = * this;
full = 0;
return r;
}
T operator *()
{
fill();
return buffer;
}
private:
T buffer;
istream *strm;
int full;
int eof;
void fill()
{
if ( ! full && ! eof )
{
if ( * strm >> buffer )
{
full = 1;
}
else
{
eof = 1;
}
}
}
};
template< class T>
int operator == ( istream_iterator< T > & p, istream_iterator< T > & q )
{
if ( p.eof && q.eof )
return 1;
if ( ! p.eof && ! q.eof )
return( & p == & q );
p.fill();
q.fill();
return ( p.eof == q.eof );
}
template< class T >
int operator != ( istream_iterator< T > & p, istream_iterator< T > & q )
{
return !( p == q );
}
template< class P, class T >
void Copy( P start, P end, T t )
{
while ( start != end )
{
*( t++ ) = *( start++ );
}
}
int main( int argc, char * argv[] )
{
ostream_iterator< int > output ( cout, "\n" );
istream_iterator< int > input( cin );
istream_iterator< int > eof;
Copy( input, eof, output );
}
template <class T> class istream_iterator;
template< class T>
int operator == ( istream_iterator< T > & p, istream_iterator< T > & q );
friend int operator == <T> ( istream_iterator< T > & p, istream_iterator< T > & q );