C++精华(STL)学习笔记之算法

<algorithm>是STL中最大得一个文件,它是由一大堆模版函数组成得。这些函数包括:

max 检测两个元素得较大值

min 检测两个元素得较小值

swap 交换两个已储存得值

iter_swap 交换两个由迭代器描述得值

max_element 检测一个序列中较大得值

min_element 检测一个序列中较小得值

equal 比较两个序列是否相等

lexicographical_compare 比较两个序列中一个序列是否排在另一个序列得前面

mismatch 检测两个序列中第一个不相等得地方

find 检测一个序列中第一个值等于给定值得位置

find_if 检测序列中第一个是pr(x)返回true得元素(pr是一个函数对象)

adjacent_find 要检测第一对相等得相邻元素

count 要计算一个序列中等于一个给定值得元素得个数

count_if 计算一个序列中使ptr(x)返回true得个数得序列

search 要在另外一个序列中检测一个序列第一次出现得地方

search_n 要在一个序列中检测第一个连续出现n次指定值得地方

find_end 要在另外一个序列中检测一个序列最后一次出现得地方

find_first_of 要在一个序列中检测另一个序列中任意一个元素第一次出现得地方

for_each 使用函数对象OP对序列中得每个元素都调用一次op(x)

generate 要使用函数对象fun,将每个元素都赋值为fun();

generate_n 要使用函数对象fun,将序列前n元素赋值为fun();

transform 要使用函数对象fun,将每个元素x调用op(x),并返回值付给另外一个序列得相应元素,

copy 将一个序列从头到尾复制给另一个序列

copy_backward 将一个序列从尾到头复制给另外一个序列

fill 将一个特定得值赋值给序列中得每个元素

fill_n 将一个特定得值赋值给序列中前n个元素

swap_ranges 交换两个序列中所储存得值

replace 将一个序列中一个特定值都替换为另一个特定值

replace_if 将一个序列中使ptr(x)返回true得元素x都替换为一个特定得值

replace_copy 要复制一个序列并将这个序列中所有等于特定值得元素都替换为另一个特定值

replace_copy_if 要使用函数pr复制一个序列并将序列中所有是pr(x)等于true得元素得值都替换成一个特定值

remove 移出掉等于特定值得元素

remove_if 要使用函数对象pr移出掉是其返回true得元素

remove_copy 复制一个序列并移出掉等于特定值得元素

remove_copy_if 使用函数对象pr复制一个序列并移出掉所有是pr(x)等于true得元素

unique 移出掉一个等于元素子序列中除去第一个元素以外得所有元素

unique_copy 复制整个序列并移出掉所有等于子序列中除第一个元素以外得所有元素

reverse 将一个序列反转

reverse_copy 复制一个序列并将它反转

rotate 要在位置N反转序列中得元素

rotate_copy 复制一个序列并在n处反转它

random_shuffle 对序列中得所有元素进行随机重排

partition 使用函数对象pr将返回true得元素移动到开始处

stable_partition 按照上述方式分割序列且又不破坏每个分割中原有元素之间得顺序

sort 使得序列以升序存储

stable_sort 要按照上述对序列进行排序且又不破坏序列元素之间原有得顺序

partial_sort 要仅将最小得n个元素以升序得方式排序并将他们移动到序列得开始处

partial_sort_copy 复制一个序列并按照上述得方式仅对最大得n个元素进行排序

nth_element 将元素n放置在符合升序顺序得位置,所有在n前面得元素都小于它,所有在n后面得元素都大于它

merge 将两个序列合并并产生一个新得序列

inplace_merge 要在适当得位置上合并两个有序序列

lower_bound 要在有序序列中检测第一个不小于各处得特定值得元素位置

upper_bound 要在有序序列中检测最后一个不小于给出得特定值得元素位置

equal_range 检测上述有序序列中对于一个特定值得第一个和最后一个不小于它得边界

binary_search 在有序序列中检测是否由与一个特定值次序相等得元素

includes 检测一个有序序列是否包含与另一个序列中得每个元素相等得元素

set_union 合并两个有序序列并产生一个新得序列(改序列将不保留第一个序列中存在得与第二个中次序相等得元素)

set_intersection 合并两个有序序列并产生一个新得序列(改序列将仅保留第一个序列中存在得与第二个中次序相等得元素)

set_difference  合并两个有序序列并产生一个新得序列(改序列将仅保留第一个序列中存在得与第二个中没有相等次序关系得元素)

set_symmetric_difference 合并两个有序序列并产生一个新得序列(改序列将仅保留与第二个中所有元素没有相等次序关系得元素)

make_heap 重排一个序列得到一个堆

push_heap 向堆中新增一个元素

pop_heap 从堆中移出掉最大得那个元素

sort_heap 对堆进行排序,并产生一个以升序方式存储得元素得序列

next_permutation 改变序列得排序,当所有元素已经是按升序排列时,返回false

prev_permutation 改变序列得排序,当所有元素已经是按将许排列时,返回false

<numeric> 头文件很小,它只包括几个在序列中得元素上面进行简单得数学运算得模版函数

accumulate 使用operator+或指定得二元操作对序列中所有元素求和

inner_product 使用operator+和operator*或两个指定得二元操作,对序列中相应元素得乘积求和

partial_sum 使用operator+或指定得二元操作产生一个求和序列,其中每个元素都是在已有得总数上再加一个元素所得到得结果

adjacent_difference 使用operator-或指定得二元操作产生一个存储相邻元素差得序列

<functional>它定义了一系列模版类用以声明函数对象极大得增强了STL得算法能力,最简单得模版类所产生得函数对象被设计为仅需要一个单独得参数就可以调用,他们得基类是unary_function;另一种比较简单得模版类所产生得函数对象被设计为调用时带有两个类型相同得参数,他们得积累是binary_function;最后还定义了复合函数对象模版与指针对象模版函数。

声明调用成员函数返回
plus<T>X;X(a,b)a-b
minus<T>XX(a,b)a+b
multiplies<T>XX(a,b)a*b
divides<T>XX(a,b)a/b
modulus<T>XX(a,b)a%b
equal_to<T>XX(a,b)a==b
not_equal_to<T>XX(a,b)a!=b
greater<T>XX(a,b)a>b
less<T>XX(a,b)a<b
greater_equal<T>XX(a,b)a>=b
less_equal<T>XX(a,b)a<=b
logical_and<T>XX(a,b)a&&b
logical_or<T>XX(a,b)a||b
logical_not<T>XX(a,b)!a
negate<T>XX(a,b)-a
a和b得类型都为T  

声明调用成员函数返回

binary_negate<F>X(f);

X=not2(f)

 X(a,b)!f(a,b)

unary_negate<G>X(g);

X=not1(g)

X(a)!g(a)

binderlst<F>X(f,a);

X=bindist(f,a)

X(b)f(a,b)

binder2nd<F>X(f,b);

X=bind2nd(f,b)

X(a)f(a,b)

f得类型F派生自binary_function,g得类型G派生自unary_function

声明调用成员函数返回

pointer_to_binary_function<T1,T2,R>

X(pf);

X=ptr_fun(pf)

X(a,b)(*pf)(a,b)

pointer_to_unary_function<T1,R>

X(pf);

X=ptr_fun(pf)

X(a)(*pf)(a)

mem_fun1_t<R,T,T1>X(pm);

X=mem_fun(pm);

 X(p,a)(p->*pm)(a)

mem_fun1_ref_t<R,T,T1>X<pm>;

X=mem_fun_ref(pm)

X(t,a)(*pm)(a)

mem_fun_t<R,T>X(pm);

X=mem_fun(pm)

X(p)(p->*pm)()

mem_fun_ref_t<R,T>X(pm);

X=mem_fun_ref(pm)

X(t)(*pm)()

const_mem_fun1_t<R,T,T1>

X(pcm);

X=mem_fun(pcm)

X(p,a)(p->*pcm)(a)

const_mem_fun1_ref_t<R,T,T1>

X(pcm)

X=mem_fun_ref(pcm)

X(t,a)(*pcm)(a)

const_mem_fun_t<R,T>X(pcm);

X=mem_fun(pcm)

X(p)(p->*pcm)()

const_mem_fun_ref_t<R,T>X(pcm);

X=mem_fun_ref(pcm)

X(t)(*pcm)()

a得类型为t1,b得类型为t2,*pf是一个函数,*pm是一个成员函数,*pcm是一个常量成员函数,p得类型是t*,t得类型是t&,返回值得类型为r
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值