STL算法、仿函数、配接器

STL算法、仿函数、配接器

1.数值算法

#include
acculmate(first,last,初始值,[op])//[op]可选,当其为minus()时表示累减,multiplies() 乘,有初始值的作用之一是当输入区间为空时,认可获得一个明确定义的的结果
inner_product(first1,last1,first2,init,[op1],[op2])//内积的定义a·b=a1b1+a2b2+……+anbn
OutputIt partial_sum( first, last, OutputIt d_first );//第三个参数是输出流迭代器,即可写入数据的迭代器
power(x,n)//x的n次方
iota(first,last,value)//SGI专属,使区间内的每一个元素从指定的value值开始,呈现递增状态

2.基本算法

mistach(first1,last1,first2,last2)//返回一个pair类型的元素,其first是两个区间第一个不匹配点,其second是两个区间最后一个不匹配点
iter_swap()//该函数必须知道迭代器的value_type
max min swap
lexicographical_compare
equal(f1,l1,f2,l2,[op])
fill_n()//相当于覆写一旦区间超出容器大小会造成不可预期的效果,解决办法之一是利用inserter()产生一个具有插入能力的迭代器,例如:
fill_n(inserter(iv,iv.begin()),5,7);
copy(f1,la,f2,l2,[op])//注意输入区间与输出区间重叠时可能产生的问题。copy更改的是迭代器所指对象,而非更改迭代器本身
copy_backward(first,last,result)//将f-l区间之内的元素逆向复制到result-1为起点方向也是逆向的区间中

3.set相关算法

此四个算法所接收的set必须是有序区间,且元素值可以重复出现,即可接受set/multiset容器作为输入区间
set_union(f1,l1,f2,l2,[op])
set_intersection(f1,l1,f2,l2,[op])
set_difference(f1,l1,f2,l2,[op])//会给出f1-s2区间中有而s2-l2区间中无的数据,可以通过将s2作为1,s1作为2来输出s2中有而s1中无的数据
set_symmertic_difference(f1,l1,f2,l2,[op])//非 两个区间共有的

4.heap算法

make_heap push_heap pop_heap sort_heap

5.其他算法

adjacent_find(f,l,[op]);
count count_if
find find_if find_first_of find_end
find() 需要支持以下四种操作符
!= *提领 ++前置递增 copy复制行为(以便产生函数的返回值)
for_each
generate(f,l,[op]) generate_n(f,n,[op])//迭代指定区间or长度
remove remove_if remove_copy_if
replace replace_copy replace_if replace_copy_if
reverse reverse_copy
rotata旋转 rotata_copy
search(f1,l1,f2,l2) search_n(f1,l1,2,8)//在区间中找连续2个8的子序列起点
search_n(f1,l1,2,less())//在区间中找连续2个小于8的子序列起点
swap_ranges(f1,l1,f2)//将区间1中的元素和以f2为起点的区间中的元素交换
transform()//交换元素用,有多种形式 用时查API
merge()//合并两个月有序序列
partition(f1,f2,op)//符合条件的放在容器点段,不符合的放在容器后段,不保证原相对次序
unique(f1,l1)//取出unique_copy
lower_bound(f1,l1,value)//应用于有序区间
upper_bound(f1,l1,value)
binary_search(f1,l1,value)//二分查找,适用于有序区间
next_permutation(first,last,[comp])//变换范围 [first, last) 为来自所有按相对于 operator< 或 comp 的字典序的下个排列。若这种排列存在则返回 true ,否则变换范围为首个排列(如同用 std::sort(first, last) )并返回 false,返回pair类型的迭代器范围
prev_permutation//上一个排列组合
random_shuffle//随机重排
partial_sort(first,middle,last)//重排元素,使得范围 [first, middle) 含有范围 [first, last) 中已排序的 middle - first 个最小元素。不保证保持相等的元素顺序。范围 [middle, last) 中剩余的元素顺序未指定。
sort(f1,l1,[排序规则])
stable_sort()
equal_range(f1,l1,value,[op])//找出一个子区间,其内每个元素都与特定值等价,应用于有序区间
nth_element(f,m,l,[op])//将相对于m满足op关系的元素至于m的左边
inplace_merge(f,m,l,[cmp])//将f-m ,m-l区间有序合并

6.仿函数

分类:(STL不支持三元仿函数)
一元仿函数unary_function
二元仿函数binary_function

7.算术类仿函数

加法:plus
减法:minus
乘法:multiplies
除法:divides
模取:modules
否定:negation
证同元素:ident_element(plus)//加法证同元素为0
ident_element(multiplies)//加法证同元素为0

8.关系类仿函数

等于equal_to
不等于not_equal_to
大于greater
大于等于greater_equal
小于less
小于等于less_equal

9.逻辑运算类仿函数

And logical_and
Or logical_or
Not logical_not

10.证同、选择、投射

identity
select1st 接受一个pair返回其第一元素
select2nd 接受一个pair返回其第二元素
project1st投射函数,传回第一参数,忽略第二参数
project2nd传回第二参数,忽略第一参数

11.配接器

改变仿函数接口者:function adapter
改变容器接口者:container adapter----->stack,queue(改变了deque的接口)
改变迭代器接口者: iterator adapter------>insert iterators ,reverse iterators,iostream iterators(将迭代器绑定到某个iostream上)

12.应用于仿函数

not1(bind2nd(less(),12))//不小于12
compose1(f(x),g(y));//等价于f(g(y))
例如:(v+2)3 ===>f(x)=x3 ,g(y)=y+2
compos1(bind2nd(multipliesMint>(),3),bing2nd(plus(),2));//此表达式可以作为op传入for_each语句

13.iterator adapters

尾插 back_insert_iterator(container& x)
头差 front_insert_iterator(container& x)
任意位置插 insert_iterator(container& x,插入的位置)
reverse_iterator
istream_iterator
istream_iterator

14.function adapters

对返回值进行逻辑否定
not1返回传递的一元谓词的补的函数对象
not2返回传递的二元谓词的补的函数对象

用于函数合成
compose1
compose2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值