C++ primer plus 第16章string 类和标准模板库, 算法

C++ primer plus 第16章string 类和标准模板库, 算法

C++ primer plus 第16章string 类和标准模板库, 算法


16.6 算法

STL包含很多处理容器的非成员函数,前面已经介绍过其中的一些:sort()、copy()、find()、random shufe()、set union()、set intersection()、set difference()和transform()。可能已经注意到,它们的总体设计是相同的,都使用迭代器来标识要处理的数据区间和结果的放置位置。有些函数还接受一个函数对象参数,并使用它来处理数据。
对于算法函数设计,有两个主要的通用部分。首先,它们都使用模板来提供泛型;其次,它们都使用迭代器来提供访问容器中数据的通用表示。因此,copy()函数可用于将double 值存储在数组中的容器、将string 值存储在链表中的容器,也可用于将用户定义的对象存储在树结构中(如set所使用的)的容器。因为指针是一种特殊的迭代器,因此诸如copy()等STL函数可用于常规数组。
统一的容器设计使得不同类型的容器之间具有明显关系。例如,可以使用copy()将常规数组中的值复制到 vector 对象中,将 vector 对象中的值复制到 list 对象中,将 list 对象中的值复制到 set 对象中。可以用来比较不同类型的容器,如 deque 和 vector。之所以能够这样做,是因为容器重载的运算符使用迭代器来比较内容,因此如果 deque 对象和 vector 对象的内容相同,并且排列顺序也相同,则它们是相等的。

16.6.1 算法组

STL将算法库分成4组:

  • 非修改式序列操作;
  • 修改式序列操作;
  • 排序和相关操作:
  • 通用数字运算。

前3组在头文件 algorithm(以前为 algo.h)中描述,第4组是专用于数值数据的,有自己的头文件,称为 numeric(以前它们也位于algol.h中)。
非修改式序列操作对区间中的每个元素进行操作。这些操作不修改容器的内容。例如,find()和for each()就属于这一类。
修改式序列操作也对区间中的每个元素进行操作。然而,顾名思义,它们可以修改容器的内容。可以修改值,也可以修改值的排列顺序。transform()、random_shume( )和 copy( )属于这一类。
排序和相关操作包括多个排序函数(包括sort())和其他各种函数,包括集合操作。数字操作包括将区间的内容累积、计算两个容器的内部乘积、计算小计、计算相邻对象差的函数。通常,这些都是数组的操作特性,因此vector是最有可能使用这些操作的容器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值