C++ primer plus 第16章string 类和标准模板库, 算法
创始人
2024-12-14 06:35:59

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

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

文章目录

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


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是最有可能使用这些操作的容器。

相关内容

热门资讯

长光卫星8颗卫星今日出征 将于... 5月17日,长光卫星技术股份有限公司在吉林省航天信息产业园举行“文物01星”、“彩云光学01星”、“...
管网式七氟丙烷气体灭火装置厂家... 导语:管网式七氟丙烷气体灭火装置作为高效环保的消防设备,广泛应用于工业厂房、电力设施、档案馆等场景。...
让好故事更好抵达观众(人文茶座... 牛梦笛 打开手机,嫦娥奔月的故事在AI(人工智能)影像里重现;节气传说、上古神话,在小小屏幕间次第展...
蜂巢能源申请电池模组和电池包专... 国家知识产权局信息显示,蜂巢能源科技股份有限公司申请一项名为“电池模组和电池包”的专利,公开号CN1...
乐道做对了,也稳住了 “两年前,乐道品牌第一次和大家见面。那时候有人问:中国市场还需要一个新品牌吗?纯电品牌真的能活下来吗...