首页 理论教育 C++STL算法库:自定义操作、迭代器和复杂度简介

C++STL算法库:自定义操作、迭代器和复杂度简介

时间:2023-10-25 理论教育 版权反馈
【摘要】:为了增强灵活性和功效,STL算法允许使用者传递自定义的操作(函数),以便于由其调用。另外,由于指针是一种特殊的迭代器,因此使用时更要注意其各种用法,以防发生失误。STL中的算法库包括4种算法:非修改性算法、修改性算法、排序和相关操作算法以及删除算法。这些算法一般通过输入型迭代器和前向型迭代器完成工作,可用于所有标准容器。C++ STL涵盖了所有变序性算法。排序算法的复杂度通常低于线性算法,要用到随机存取迭代器。

C++STL算法库:自定义操作、迭代器和复杂度简介

STL算法一般采用“覆盖(Overwrite)”模式而不是“插入(Insert)”模式。调用算法时,必须保证目标区间拥有足够的元素空间。当然也可以使用“插入(Insert)”型迭代器访问容器

为了增强灵活性和功效,STL算法允许使用者传递自定义的操作(函数),以便于由其调用。这些操作(函数)既可以是一般函数,也可以是仿函数。若返回值是bool类型,则称之为条件判断式。

算法设计有两个主要的通用部分。首先,这些函数都使用模板来提供通用类型;其次,这些函数都使用迭代器来提供访问容器中数据的通用表示。所以,程序员可以将数值存储于数组中,或者存储在链表中;还可以将对象存储在树结构中。另外,由于指针是一种特殊的迭代器,因此使用时更要注意其各种用法,以防发生失误。

STL中的算法库包括4种算法:非修改性算法、修改性算法、排序和相关操作算法以及删除算法。(www.xing528.com)

非修改式性算法不移动容器中元素的次序,也不修改元素的值。这些算法一般通过输入型迭代器和前向型迭代器完成工作,可用于所有标准容器。

修改式性算法一般不直接改变容器中元素的值,或者在复制到另一区间的过程中改变元素值。修改性算法还包括了移除性质或删除性质的算法。移除一般只是在逻辑上“移除”元素,不改变容器的大小和容器中的元素个数“移除”和“删除”是不同的算法。

排序和相关操作算法包括多个排序函数和其他各种函数,包括集合操作等。C++ STL涵盖了所有变序性算法。排序一般是指通过对容器中元素的赋值和交换改变元素顺序。排序算法的复杂度通常低于线性算法,要用到随机存取迭代器。变序性算法不能以关联式容器作为目标,这是因为关联式容器的元素都被视为常数,不能变更。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈