#include<iostream>
using namespace std;
template <class OutputIterator, class Iterator, class predicate>
void copy(OutputIterator o, Iterator f, Iterator l, predicate p)
{
while(f!=l)
{
if(p(*f))
{
*o = *f;
++f;
++o;
}
else
{
++f;
}
}
}
template <class Predicate>
class negate
{
Predicate p;
public :
typedef typename Predicate::value_type value_type;
negate(const Predicate &pred):p(pred){}
bool operator()(const value_type v)const
{
return !p(v);
}
};
template<class Number>
struct smallerThanX
{
typedef Number value_type;
int x;
smallerThanX(int x):x(x)
{
}
bool operator()(const Number& n) const
{
return n< this->x;
}
};
template <class Predicate>
inline negate<Predicate > NOT (const Predicate &p)
{
return negate<Predicate>(p);
}
int main()
{
int a[] = {1,2,3,4,5,6,7,8};
int *b = new int [10];
copy(b,a,a+8,NOT(smallerThanX<int>(5)));
return 0;
}
这种方式实在是有点难看啊。。。 代码不仔细看还看不懂,不知道为什么要这样写呢。。。