1,generate_n(序列起点,个数,函数发生器)
2,transform(begin,end,保存起点,unaryfunc)
transform(begin1,end1,begin2,保存起点,binaryfunc)
实例代码:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <set>
#include <vector>
using namespace std;
template<typename ite> //打印任意迭代器类型限定的序列
void myPrint(ite first, ite last, const char* ss="", const char* ee=" ", ostream& os=cout)
{
if(ss!=0&&*ss!='\0')
os<<ss<<": "<<ee;
typedef typename iterator_traits<ite>::value_type T;//这样就可以处理任意迭代器类型限定的序列
copy(first,last,ostream_iterator<T>(os,ee));
os<<endl;
}
class LimitRand //生成一个出现一次的随机数
{
set<int> used;
int limit;
public:
LimitRand(int lim):limit(lim){}
int operator()()
{
while(1)
{
int i=(int)(rand())%limit;
if(used.find(i)==used.end())
{
used.insert(i);
return i;
}
}
}
};
int main()
{
//ostream_iterator<int> out(cout, "\n") ;
int a[]={1,3,5,7,9};
int size=sizeof(a)/sizeof(a[0]);
myPrint(a,a+size,"a");
const int SZ=10;
vector<int> x(SZ),y(SZ),r(SZ);
LimitRand lr(100);
srand(time(0));
//结合使用
generate_n(x.begin(),SZ,lr);
myPrint(x.begin(),x.end(),"x");
generate_n(y.begin(),SZ,lr);
myPrint(y.begin(),y.end(),"y");
//相加,并将结果保存到r
transform(x.begin(),x.end(),y.begin(),r.begin(),plus<int>());
myPrint(r.begin(),r.end(),"x+y");
//判断是否小于,并将结果保存到r
transform(x.begin(),x.end(),y.begin(),r.begin(),less<int>());
myPrint(r.begin(),r.end(),"less");
//r逻辑取反
transform(r.begin(),r.end(),r.begin(),logical_not<int>());
myPrint(r.begin(),r.end(),"logical_not");
}