#include<iostream>
using namespace std;
#include <vector>
#include<algorithm>
#include <iterator>
/*
容器,算法,迭代器,函数对象(仿函数)
数组,函数,指针
*/
#if 0
bool fn(int a,int b)
{
return a > b ? true : false;
}
template<class T>
class Less
{
public:
bool operator()(T a,T b)
{
return a < b ? true : false;
}
};
void main()
{
int a[5] = {11,22,3,4,5};
int *p = a;
vector<int> v(a,a+5);
vector<int>::iterator iter = v.begin();
//sort(iter,v.end(),fn);
sort(iter,v.end(),Less<int>()); //Less
for(;iter != v.end(); iter++)
cout<<*iter<<" ";
cout<<endl;
}
#endif
bool greate5(int n)
{
return n > 5 ? true : false;
}
void print(int n)
{
cout<<n<<" ";
}
class SUM
{
public:
SUM():sum(0){}
int operator()(int n)
{
return sum+=n;
}
int sum;
};
int square(int n)
{
return n*n;
}
void main()
{
int a[10] = {1,2,3,4,5,5,1,8,9,0};
int b[10];
copy(a,a+10,b);
//copy(istream_iterator<int>(cin),istream_iterator<int>(),b);
copy(b,b+10,ostream_iterator<int>(cout," "));
cout<<endl;
/* istream_iterator<int> in1(cin);
istream_iterator<int> in2;
while(1)
{
cout<<*in1<<" ";
in1++;
if(in1 == in2)
break;
}
*/
reverse(b,b+5);
copy(b,b+10,ostream_iterator<int>(cout," "));
cout<<endl;
swap(a,b);
copy(b,b+10,ostream_iterator<int>(cout," "));
cout<<endl;
cout<<"find "<<*(find(a,a+10,4)-1)<<endl;
cout<<"find_if"<<*find_if(a,a+10,greate5)<<endl;
cout<<"count = "<<count(a,a+10,1)<<endl;
cout<<"count_if ="<<count_if(a,a+10,greate5)<<endl;
cout<<"replace:"<<endl;
replace(a,a+10,1,100);
copy(a,a+10,ostream_iterator<int>(cout," "));
cout<<endl;
replace_if(a,a+10,greate5,99);
copy(a,a+10,ostream_iterator<int>(cout," "));
cout<<endl;
int c[5] = {1,2,3,4,5};
SUM s = for_each(c,c+5,SUM());
cout<<s.sum<<endl;
for_each(c,c+5,print);
cout<<endl;
int d[10];
// transform(a,a+10,d,negate<int>());
// transform(a,a+10,d,square);
transform(a,a+10,a,square);
for_each(a,a+10,print);
cout<<endl;
swap_ranges(a,a+5,c);
for_each(a,a+10,print);
cout<<plus<int>()(4,6)<<endl;
}
09-19