Opened 10 years ago

Closed 9 years ago

#8409 closed Feature Requests (invalid)

copy_n

Reported by: anonymous Owned by: Neil Groves
Milestone: To Be Determined Component: range
Version: Boost 1.52.0 Severity: Problem
Keywords: Cc:

Description

feature request: Boost.Range doesnt have a copy_n algorithm, I guess because the range already includes a "size". it's still useful if you need to copy N elements but don't know if the range has enough elements. you can't easily check because you don't know whether the range is random access.

if(copy_n(range,size,out) != out+size) throw something;
template<class Range,class Size,class OutputIterator>
OutputIterator copy_n(Range const &r,Size s,OutputIterator const &out,std::random_access_iterator_tag){
    if(s <= size(r) return range_copy(r,out);
    else return out;
}

template<class Range,class Size,class OutputIterator,class InCat>
OutputIterator copy_n(Range const &r,Size s,OutputIterator out,InCat){
    typename range_const_iterator<Range>::type it=begin(r);
    for(std::size_t c=0;c<s && it != end(r);++c){
        *out++=*it++;
    }
    return out;
}


template<class Range,class Size,class OutputIterator>
OutputIterator copy_n(Range const &r,Size size,OutputIterator const &out){
    return detail::copy_n(r,size,out,typename range_category<Range>::type());
}

Change History (1)

comment:1 by Neil Groves, 9 years ago

Resolution: invalid
Status: newclosed

This already exists in the boost/range/algorithm_ext/copy_n.hpp file

Note: See TracTickets for help on using tickets.