C++高阶-用STL中的通用算法处理数据

STL 提供了大量的通用算法,利用这些算法可以轻松完成对数据的常见处理,比如数据的查找、排序和遍历访问等。因此在大多数情况下,当我们需要某个常见算法对数据进行处理的时候,直接使用 STL 提供的算法就可以了,无需自己开发,从而可以极大地提高我们的开发效率。同时,无论是这些算法的效率还是实现质量,往往都要比我们自己动手实现的相同算法要高,这无疑会提高我们的开发质量。

STL 算法中的“四大帮派”

STL 库中的算法都以迭代器为参数,这就使得算法和数据所在容器的具体实现相互分离了。同样一个 sort()排序算法, 我们既可以将其用于 vector 容器,也同样可以将其用于 map 容器。

不动帮-不改变元素顺序的操作

绝不会改变元素在容器中的顺序,而只是对数据元素的值进行读写访问,所以被称为“不动帮”。例如,最常用的 for_each()算法就是逐个遍历容器中的数据元素并对其进行访问,进而可以读取或者修改各个数据元素的值。除此之外,这一帮派中还有查找( find)、邻近查找( adjacent find)、计数( count)、不匹配( mismatch)、相等( equal)、搜索( search)等算法。

扰民帮-改变元素顺序的操作

它们不仅会访问数据元素的值,还会把数据元素搬来搬去,改变它们在容器中的位置和顺序,因此这一类算法常用来对数据元素进行复制变换等操作。例如,其中的 copy()算法可以将一个容器中的数据元素复制到另外一个容器中,从而改变目标容器中数据元素的位置。这一帮派中常用的算法还有拷贝( copy)、交换( swap)、变换( transform)、替换( replace)、填充( fill)等。

排序帮-排序及相关操作

“排序帮”的算法要求容器中的数据必须可以通过“<”操作符比较大小。如果容器中保存的是基本数据类型的数据倒还好说,比如 int 或 string 等,它们已经重载了“<”操作符,可以直接使用排序算法对容器中的数据进行排序。但如果容器中保存的是自定义数据类型的数据,排序算法会要求这些自定义数据类型也同样重载“<”操作符以比较大小。

可以通过给排序算法提供表示排序规则的函数,对排序算法进行自定义以实现比较特殊的排序规则。在“排序帮”中,除了排序算法, STL 还提供了很多跟排序相关的算法,例如:二分搜索( binary search)、合并( merge)、堆操作( heap operations)、最大最小( minimum and maximum)、词典比较( lexicographical comparison)等。

数字帮-常用的数字操作

例如,累加( accumulate)、内积( inner product)、局部累加( partial sum)、差分( adjacent difference)等。

STL 中的各个算法虽然拉帮结派,但它们都声明在<algorithm>头文件中,当我们想要在程序中使用这些算法时,必须先使用#include 指令引入这个头文件同时使用 std 名字空间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值