Stl算法

stl算法采用覆盖模式,而不是插入模式。所以调用者必须保证目标区间拥有足够的元素空间。也可以用特殊的插入型迭代器来解决这个问题。

非变动性算法

名称 作用
for_each 对每个元素执行某项操作
count 返回元素个数
count_if 返回满足某一准则的元素个数
min_element 返回最小值
max_element 返回最大值
find 搜寻等于某个值的第一个元素
find_if 搜寻满足某一准则的第一个元素
search_n 搜寻具有某特性的第一段n个连续元素
search 搜寻某个子区间第一次出现的位置
find_end 搜寻某个子区间最后出现的位置
find_first_of 搜寻等于某数个值之一的第一个元素
adjacent_find 搜寻连续两个相等(符合特定准则)的元素
equal 判断两个区间是否相等
mismatch 返回两个序列的各组对应元素中,第一队不相等元素
lexicographical_compare 判断某一序列在字典顺序下是否小于另一序列

非变动性算法既不改变元素次序,也不改动元素值。

变动性算法

名称 作用
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 复制整个区间,同时并将符合某准则的元素替换为另一个值

变动性算法,要不直接改变元素值,要不就是在复制到另一区间的过程中改变元素值。

关联式容器的元素被视为常数,所以不能将关联式容器当做变动性算法的目标区间

for_each 与 transform 改变元素值

// 传入引用来改变值
void ForEach(int& elem)
{
    elem = elem * elem;
}
// 通过返回值来改变值
int FnTransform(int elem)
{
    return elem * elem;
}
    vector<int> coll;
    for (int ia = 0; ia < 10; ++ia)
    {
        coll.push_back(ia);
    }
    for_each(coll.begin(), coll.end(), ForEach);
    PrintElem(coll);
    // 0 1 4 9 16 25 36 49 64 81
    transform(coll.begin(), coll.end(), coll.begin(), FnTransform);
    PrintElem(coll);
    // 0 1 16 81 256 625 1296 2401 4096 6561

移除性算法

名称 作用
remove 将等于某特定值的元素全部移除
remove_if 将满足某准则的元素全部移除
remove_copy 将不等于特定值的元素全部复制到其他处
remove_copy_if 将不满足某准则的元素全部复制到他处
unique 移除毗邻的重复元素
unique_copy 移除毗邻重复元素,并复制到它处

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

变序性算法

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

变序性算法通过元素的赋值和交换,改变元素次序。变序行算法也不能以关联式容器作为目标。

排序算法

名称 作用
sort 对所有元素排序,内部采用quicksort,复杂度为n*log(n)
stable_sort 对所有元素排序,并保持相等元素间的相对次序,内部采用mergesort,内存足够时为n*log(n),否则为n*log(n)*log(n)
partial_sort 排序,直到前n个元素就位,内部采用heapsort,任何情况保证n*log(n)
partial_sort_copy 排序,直到前n个元素就位,结果复制到它处
nth_element 根据第n个位置进行排序
partition 改变元素次序,使符合某准则者移到前面
stable_partition 与partition相似,但保持符合准则与不符合准则各个元素之间的相对位置
make_heap 将一个区间转换成一个heap
push_heap 将元素加入一个heap
pop_heap 从heap移除一个元素
sort_heap 对heap进行排序,执行后就不再是个heap了

排序算法是一种特殊的变序行算法,比一般的变序行算法复杂,花费更多时间,需要动用随机存取迭代器。

已序区间算法

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

数值算法

名称 作用
accumulate 组合所有元素(求总和,求乘积)
inner_product 组合两区间内的所有元素
adjacent_difference 将每个元素和其前一个元素组合
partial_sum 将每个元素和其先前的所有元素组合
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值