$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Thorsten Ottosen (thorsten.ottosen_at_[hidden])
Date: 2008-01-24 17:34:13
Thorsten Ottosen skrev:
> chun ping wang skrev:
>> well merge, union, intersection algorithm..
> 
> merge() is there as a member function, the others are not.
> 
> I'll put boost::clone_back_inserter() or boost::ptr_back_inserter()
> on my todo. They are not hard to do.
I've uploaded boost/ptr_container/clone_inserter.hpp to trunk.
Here's the synopsis:
namespace boost
{
namespace ptr_container
{
     template< class PtrContainer >
     class clone_back_insert_iterator;
     template< class PtrContainer >
     class clone_front_insert_iterator;
     template< class PtrContainer >
     class clone_insert_iterator;
     template< class PtrContainer >
     clone_back_insert_iterator<PtrContainer>
     clone_back_inserter( PtrContainer& cont );
     template< class PtrContainer >
     clone_front_insert_iterator<PtrContainer>
     clone_front_inserter( PtrContainer& cont );
     template< class PtrContainer >
     clone_insert_iterator<PtrContainer>
     clone_inserter( PtrContainer& cont,
                     typename PtrContainer::iterator before );
}
}
Each iterator defines three different versions of operator=(), because 
there are slightly different situations to handle,e.g. for 
clone_back_insert_iterator:
         clone_back_insert_iterator&
         operator=( typename PtrContainer::value_type r );
         template< class T >
         clone_back_insert_iterator&
         operator=( std::auto_ptr<T> r );
         clone_back_insert_iterator&
         operator=( typename PtrContainer::const_reference r )
The first copies null's correctly. he second can be used with a moving 
transform iterator. The third is most handy, but requires a container 
without nulls. Some examples:
    std::copy( boost::make_transform_iterator( seq.begin().base(), 
caster_to<int*>() ),
                boost::make_transform_iterator( seq.end().base(), 
caster_to<int*>() ),
                ptr_container::clone_back_inserter( seq2 ) );
     std::copy( seq3.begin(), seq3.end(),
                ptr_container::clone_inserter( seq, seq.end() ) );
Let me know what you think
best regards
-Thorsten