通用算法笔记4

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");
}

你可能感兴趣的:(算法,OS)