/*
* Modifying Sequence Algorithms
*
*
* Copy
*
*/
template<class In, class Out>
Out copy(In first, In last, Out res)
{
while (first != last) *res++ = *first++;
return res;
}
template<class Bi, class Bi2>
Bi2 copy_backward(Bi first, Bi last, Bi2 res)
{
while (first != last) *--res = *--last;
return res;
}
template<class In, class Out, class Pred>
Out copy_if(In first, In last, Out res, Pred p)
{
while (first != last) {
if (p(*first)) *res++ = *first;
++first;
}
return res;
}
/*
* Usage
*
*/
void f(list<Club>& lc, ostream& os)
{
copy(lc.begin(),lc.end(),ostream_iterator<Club>(os));
}
void f(vector<char>& vs)
{
vector<char> v;
copy(vs.begin(),vs.end(),v.begin()); // error: might overwrite end of v
copy(vs.begin(),vs.end(),back_inserter(v)); // ok: add elements from vs to end of v
}
void f(list<int>&ld, int n, ostream& os)
{
copy_if(ld.begin(),ld.end(),ostream_iterator<int>(os),bind2nd(greater<int>(),n));
}