STL算法小结

变动性算法
---------------------------------------------------------
名称             效果

for_each        针对每个元素执行某项操作
copy            从第一个元素开始,复制某段区间
copy_backward   从最后一个元素开始,复制某段区间
transform       变动(并复制)元素,将两个区间的元素合并
merge           合并两区间内的元素
swap_ranges     交换两区间内的元素
fill            以给定值替换每一个元素
fill_n          以给定值替换n个元素
generate        以某项操作的结果替换每一个元素
generate_n      以某项操作的结果替换n个元素
replace         将具有某特定值的元素替换为另外一个值
replace_if      将符合某准则的元素替换为另外一个值
replace_copy    复制整个区间,同时将具有某特定值的元素替换为另一个值
replace_copy_if 复制整个区间,同时将符合某个准则的元素替换为另外一个值

变序性算法
------------------------------------------------
名称                     效果
reverse              将元素的次序逆转
reverse_copy         复制的同时,逆序元素顺序
rotate               旋转元素次序
rotate_copy          复制的同时,旋转元素次序
next_permutation     得到元素的下一个排序次序
prev_permutation     得到元素的上一个排列次序
random_shuffle       将元素的次序随机打乱
partition            改变元素次序,使得符合某准则者移到前面
stable_partition     与partition相似,但保持符合准则与不符合准则的各个元素之间的相对位置

名称             作用
----------------------------------------
for_each         对每个元素执行某个操作
count            返回元素个数
count_if         返回满足某一准则的元素个数
min_element()    返回最小值元素
max_element()    返回最大值元素
find             搜寻等于某值的第一个元素
find_if          搜寻满足某个准则的第一个元素
search_n         搜寻具有某个特性的第一段"n个连续元素"
serach           搜寻某个子区间第一次出现的位置
find_end         搜寻某个子区间最后一次出现位置
find_first_of    搜寻等于某个值之一的第一个元素
adjacent_find    搜寻连续两个相等的元素
equal            判断两个区间是否相等
mismatch         判断两区间是否相等
lexicographical
_compare         是否小于另一个序列

string搜寻函数和STL搜索算法的比较

搜寻                                 string函数                           STL算法
-------------------------------------------------------------------------------
某元素第一次出现位置                  find()                           find()   
某元素最后一次出现位置               rfind()                          find() 采用逆向迭代器
某子区间第一次出现位置               find()                           serach()
某子区间最后一次出现位置            rfind()                          find_end()
某数个元素第一次出现位置            find_first_of()               find_first_of()
某数个元素最后一次出现位置         find_last_of()                first_first_of() 采用逆向迭代器
n个连续元素第一次出现位置                                             serach_n()

排序算法
----------------------------------------
名称                       效果

sort                    对所有元素排序
stable_sort             对所有元素排序,并保持相等元素间的相对次序
partial_sort            排序,直到前n个元素就位
partial_sort_copy       排序,直到前n个元素就位,结果复制于它处
nth_element             根据第n个位置进行排序
partiton                改变元素次序,使得符合某准则的元素放在前面
stable_partition        与partition相同,但保持符合准则和不符合准则的各个元素之间的相对位置
make_heap               将一个区间转换为一个heap
push_heap               将一个元素加入到heap
pop_heap                从heap移除一个元素
sort_heap               对heap进行排序,执行后就不再是一个heap了

sort ----------内部采用快速排序
partial_sort  ------- 采用heapsort算法
stable_sort ------- 采用mergesort

数值算法
---------------------------------------------------
名字                  功能

accumulate          组合所有元素(求总和,总乘积 ....)

inner_product       组合两区间内的所有元素

adjacent_difference  将每个元素和前一元素组合

partial_sum          将每个元素和其先前的所有元素组合

移除性算法
------------------------------------------
名称                   效果
remove            将等于某个特定值的元素全部移除
remove_if         将满足某个准则的元素全部移除
remove_copy       将不等于某个特定值的元素全部复制到它处
remove_copy_if    将不满足某个准则的元素全部复制到它处
unique            移除毗邻的重复元素
unique_copy       移除毗邻的重复元素,并重复到它处

移除算法只是逻辑上移除元素,手段是:将不需要移除的元素向前覆盖应被移除的元素。因此它并不改变
操作区间内的元素个数,而是返回逻辑上新的终点位置。

已序区间算法
---------------------------------------------
名称                         效果

binary_serach            判断某区间内是否包含某个元素
includes                 判断某区间内的每个元素是否都涵盖于另一个区间中
lower_bound              搜寻第一个大于等于给定值的元素
upper_bound              搜寻第一个大于给定值的元素
equal_range              返回等于给定值的所有元素的区间
merge                    将两个区间的元素合并
set_union                求两个区间的并集
set_intersection         求两个区间的交集
set_difference           求位于第一区间但不位于第二区间的所有元素,形成一个已序区间
set_symmetric_difference 找出只出现于两区间之一的所有元素,形成一个已序区间
inplace_merge            将两个连续的已序区间合并

时间: 2024-11-17 06:07:46

STL算法小结的相关文章

STL中的算法小结

(1)要运用STL的算法,首先必须包含头文件<algorithm>,某些STL算法用于数值处理,因此被定义于头文件<numeric> (2)所有STL算法都被设计用来处理一个或多个迭代器区间,第一个区间通常以起点和终点表示,至于其他区间,多数情况下你只需提供起点便足以,其终点可以自动以第一个区间的元素数量推断出来,调用者必须保证这些区间的有效性. STL算法采用覆盖模式而非安插模式,所以调用者必须保证目标区间拥有足够的元素空间,当然你也可以运用特殊的安插型迭代器将覆盖模式改变为安插

STL算法设计理念 - 函数对象和函数对象当參数和返回值

函数对象: 重载函数调用操作符的类.其对象常称为函数对象(function object),即它们是行为类似函数的对象. 一个类对象,表现出一个函数的特征,就是通过"对象名+(參数列表)"的方式使用一个类对象,假设没有上下文,全然能够把它看作一个函数对待. 这是通过重载类的operator()来实现的. "在标准库中.函数对象被广泛地使用以获得弹性".标准库中的非常多算法都能够使用函数对象或者函数来作为自定的回调行为: demo #include <iostr

数据挖掘中分类算法小结

数据挖掘中分类算法小结 数据仓库,数据库或者其它信息库中隐藏着许多可以为商业.科研等活动的决策提供所需要的知识.分类与预测是两种数据分析形式,它们可以用来抽取能够描述重要数据集合或预测未来数据趋势的模型.分类方法(Classification)用于预测数据对象的离散类别(Categorical Label);预测方法(Prediction )用于预测数据对象的连续取值. 分类技术在很多领域都有应用,例如可以通过客户分类构造一个分类模型来对银行贷款进行风险评估;当前的市场营销中很重要的一个特点是强

稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结

稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 一:稀疏矩阵的三元组顺序表数据结构 typedef int ElemType; typedef struct { intx, y;  //该非零元素的行下标和列下标 ElemTypee; //该非零元素的值 } Triple; typedef struct { Tripledata[MAXSIZE]; //非零元素三元组顺序表 intmu, nu, t

STL算法 — sort

能使用STL的sort系列算法的前提是容器的迭代器必须为随机迭代器.所以,vector和deque天然适用.STL的sort算法采用了一些策略,在不同情况下采用不同的排序算法,以达到各种算法优势互补的效果.基本的原则是:数据量大时采用快速排序,数据量小时采用插入排序(这是对快排常用的一种优化策略),递归层次过深改用堆排序. 首先是插入排序.它的平均和最坏时间复杂度都为O(N2),量级小于千,那么插入排序还是一个不错的选择.SGI STL的插入排序默认以增序排列,另外还可以传入一个仿函数作为比较规

STL学习小结

STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合,这些"容器"有list, vector,set,map等,STL也是算法和其它一些组件的集合.这里的"容器"和算法的集合指的是世界上非常多聪明人非常多年的杰作.是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C++差点儿同一时候開始开发的:一開

C++ 之高效使用STL ( STL 算法分类)

http://blog.csdn.net/zhoukuo1981/article/details/3452118 C++ 之高效使用STL ( STL 算法分类),布布扣,bubuko.com

c++之STL(13) STL 算法 - 查找算法(4)find_first_of(b,e,sb,se) find_first_of(b,e,sb,se,bp)

find_first_of(b,e,sb,se) find_first_of(b,e,sb,se,bp) 使用逆向迭代器 没有find_last_of算法 STL 查找算法 find() find_if() search_n() search() find_end() find_first_of() adjacent_find() string 查找函数和STL查找算法的比较 string函数    STL算法 find()                find() rfind()      

【C/C++学院】0830-兰不达表达式/STL算法-操作数据

兰不达表达式 #include<iostream> #include<vector> #include<algorithm>//算法 lambda表达式,不仅仅适用与array ,也适用于vector void main1() { std::vector<int> myvector; myvector.push_back(11); myvector.push_back(22); myvector.push_back(33); myvector.push_ba