《c++primer》学习笔记:泛型算法结构

本文深入探讨了C++标准库中的五类迭代器,包括它们在算法中的作用。接着介绍了算法形参模式,特别是如何通过谓词参数来定制比较操作。此外,文章详细阐述了算法的命名规范,例如_if版本的算法用于接受谓词,以及拷贝和不拷贝版本的算法如何区分。通过对unique、find_if、remove_copy_if等实例的分析,展示了如何灵活运用这些规范来实现不同的功能。
摘要由CSDN通过智能技术生成

目录

1.五类迭代器

 2.算法形参模式

 3.算法命名规范

一些算法使用重载形式传递一个谓词

_if版本的算法

区分拷贝元素的版本和不拷贝的版本


1.五类迭代器

 2.算法形参模式

 3.算法命名规范

除了参数规范,算法还遵循一套命名和重载规范。这些规范处理诸如:如何提供一个操作代替默认的<或==运算符以及算法是将输出数据写入输入序列还是一个分离的目的位置等问题

一些算法使用重载形式传递一个谓词

接受谓词参数来代替<或==的算法,以及那些不接受额外参数的算法,通常都是重载的函数。函数的一个版本用元素类型的运算符来比较元素;另一个版本接受一个额外谓词参数来代替<或==:

unique(beg,end);//用==比较元素
unique(beg,end,comp);//用comp比较元素

由于参数个数不等,所以调用无歧义 

_if版本的算法

接受一个元素值得算法通常有另一个不同名的版本,该版本接受一个谓词代替元素值。接受谓词参数的算法都有附加的_if前缀:

find(beg,end,val);//查找输入范围中val第一次出现的位置
find_if(beg,end,pred);//查找第一个令pred为真的元素

由于参数的数目相等,为了避免任何可能的歧义,标准库选择提供不同名字的二版本而不是重载。

区分拷贝元素的版本和不拷贝的版本

默认情况下,重排元素的算法将重排后的元素写回给定的输入序列中。这些算法还提供另一个版本,将元素写道一个指定的输出目的位置。如我们所见,写到额外目的空间的算法都在名字后面附加一个_copy

reverse(beg,end);//反转输入范围中元素的顺序
reverse_copy(beg,end,dest);//将元素按逆序拷贝到dest

一些算法同时提供_copy和_if版本。这些版本接受一个目的位置迭代器和一个谓词:

//从v1中删除奇数元素
remove_if(v1.begin(),v1.begin(),[](int i){return i % 2;});
//将偶数元素从v1拷贝到v2;v1不变
remove_copy_if(v1.begin(),v1.end(),back_inserter(v2),
                [](int i){return i%2;});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值