泛型算法

1、泛型算法:建立在容器上的操作。

      泛型:算法适用于不同的容器和数据类型。

2、头文件:#include<algorithm>  //大多数泛型算法

                     #include<numeric>  //数值泛型算法

3、迭代器使算法不依赖于容器,算法依赖于元素类型的操作。标准库算法对一定范围内的元素进行操作,这个范围是输入范围。算法不会执行容器操作(扩展容器、删除元素)。

4、

(1)只读算法:

    accumulate(c.cbegin(),c.cend(),初始值) // 求一个范围元素的和,初始值若为string则应为string("str")

    equal(c.cbegin(),c.cend(),d.cbegin())   //比较d与c是否相等

 (2)写容器元素算法:

 fill(c.begin(),c.end(),string("str"))        //将所有元素置为str

 fill_n(c.begin(),n,val)   //将n个元素置为val

back_inserter(vec)  //返回指向该向量的迭代器

(3)拷贝算法:

auto c=copy(begin(a),end(a),b);  //copy 将a数组的一定范围内的元素拷贝到b中,返回b尾元素之后的位置。

(4)容器元素排序算法:

sort(a.begin(),a.end()); //从小到大对容器中的元素排序

 auto unique_end=unique(story.begin(),story.end()); // unique函数将排序后重复的元素移动到最后,返回最后一个不重复元素的下一个位置。还要调用erase删除重复元素。

  谓词:可调用的表达式,有一元谓词(一个参数)和二元谓词(二个参数),谓词的参数类型要与元素的参数类型保持一致。

bool isShorter(const string&s1,const string&s2)  //二元谓词

{return s1.size()<s2.size();}

sort(a.begin(),a.end(),isShorter);  //单词从短到长排序

(5)定制操作

lambda表达式:[capture list](parameter list)->return type{function body}

捕获列表(调用lambda的函数的局部变量),参数列表,返回值类型可以省略。调用时与调用函数相同。可以当成谓词使用。

auto f=[]{return 45;} ;   cout<<f();

auto f=[v1]{return v1;};

auto f=[&v1]{return v1;};

[&]{} 、 [=]{}  //lambda可以推断要使用的变量。(&:推断使用的引用,=:推断使用的值)

transform(a.begin(),a.end(),a.begin(),[](int i)->int{if(i>3) return 3;else return 0;)};    //含if语句要指定返回值类型

(6)迭代器:

插入迭代器:绑定到容器上,用于插入元素      back_inserter  front_inserter   inserter

流迭代器:绑定到输入、输出流上,遍历IO流      istream_iterator   ostream_iterator

反向迭代器:从尾元素到首元素移动。  //  rbegin()   rend();

移动迭代器:移动元素

(7)泛型算法模式:

alg(beg,end,other args);

alg(beg,end,dest,other args);   //dest:位置

alg(beg,end,beg2,other args);  

alg(beg,end,beg2,end2,other args);

(8)泛型算法的操作对象:

容器、数组、IO流。算法在迭代器上操作,与实现类型无关。







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值