C++菜鸟学习笔记——算法篇
来源:互联网 发布:优惠券查询系统源码 编辑:程序博客网 时间:2024/06/03 15:58
闲来没事,将书上的算法总结了下:
A.查找算法
简单查找:
find(beg,end,val); //返回值为val的迭代器
count(beg,end,val); //返回值为val的个数
find_if(beg,end,unaryPred);
count_if(beg,end,unaryPred);//与上面相同,只是要找出使unaryPred为真的值
find_first_of(beg1,end1,beg2,end2);
find_first_of(beg1,end1,beg2,end2,binaryPred);//返回(beg2,end2)中的任意元素在(beg1,end1)中的第一次出现
find_end(beg1,end1,beg2,end2);
find_end(beg1,end1,beg2,end2,binaryPred);//与上面相同,但是返回的是最后一次出现
查找子序列:
adjacent_find(beg,end);
adjacent_find(beg,end,binaryPred);//返回重复元素的第一个相邻对
search(beg1,end1,beg2,end2);
search(beg1,end1,beg2,end2,binaryPred);//在(beg1,end1)中查找(beg2,end2)子序列
B.其他只读算法
for_each(beg,end,fun);//对输入范围中的每个函数都使用fun函数(或函数对象),若fun有返回值,则忽略返回值
mismach(beg1,end1,beg2);
mismach(beg1,end1,beg2,binaryPred);//返回2个范围中第一个不匹配元素的迭代器
equal(beg1,end1,beg2);
equal(beg1,end1,beg2,binaryPred);//如果2个范围的元素相同,返回true
C.二分查找
lower_bound(beg,end,val);
lower_bound(beg,end,val,comp);//返回值为val第一个位置的迭代器
upper_bound(beg,end,val);
upper_bound(beg,end,val,comp);//返回值为val最后一个位置的迭代器
equal_range(beg,end,val);
equal_range(beg,end,val,comp);//...
以上3种均可以将val插入序列中,而顺序不变
binary_search(beg,end,val);
binary_search(beg,end,val,comp);//返回一个bool,检查范围中是否会有与val相同的元素
D.写容器元素的算法
fill(beg,end,val);//在(beg,end)中全部填入val
generate(beg,end,gen);//执行函数gen()来填充序列(beg,end)
fill_n(dest,cnt,val);
generate_n(dest,cnt,gen);//与上面差不度
copy(beg,end,dest);//将序列(beg,end)复制到迭代器dest开始的序列中
transform(beg,end,dest,unaryOp);//一元操作符
transform(beg1,end1,beg2,dest,binaryOp);//将序列进行指定操作后复制到目的序列dest,二元操作符
replace(beg,end,old_val,new_val);
replace(beg,end,unaryPred,new_val);//用新值代替旧值
replace_copy(beg,end,dest,old_val,new_val);
replace_copy(beg,end,dest,unaryPred,new_val);//将序列的每个元素复制到dest,并用新值代替旧值
merge(beg1,end1,beg2,end2,dest);
merge(beg1,end1,beg2,end2,dest,comp);//2个已排序序列合并,然后复制到dest
swap(elem1,elem2);
iter_swap(iter1,iter2);
swap_range(beg1,end1,beg2);//显然,交换
copy_backward(beg,end,dest);//逆序复制到dest
inplace_merge(beg,mid,end);
inplace_merge(beg,mid,end,comp);//将同一序列中的相邻2子序列合并成一个有序序列
E.划分与排序
划分:
stable_partition(beg,end,unaryPred);
partition(beg,end,unaryPred);//使unaryPred为真的放开头,为假的放末尾,返回一个迭代器,指向使unaryPred为真的最后元素的下一位
排序:
sort(beg,end);
stable_sort(beg,end);
sort(beg,end,comp);
stable_sort(beg,end,comp);//整个范围进行排序
partial_sort(beg,mid,end);
partial_sort(beg,mid,end,comp);//在整个范围找出前(beg,mid)排序,后面的(mid,end)是没有排序的
partial_sort_copy(beg,end,destbeg,destend);
partial_sort_copy(beg,end,destbeg,destend,comp);//排序,复制
nth_element(beg,nth,end);
nth_element(beg,nth,end,comp);//排序后的序列,nth前面的都比nth小,后面的都比nth大,前面或后面是没有顺序的
F.通用重新排序
remove(beg,end,val);
remove_if(beg,end,unaryPred);//移去元素,如输入为helloworld,val=‘0’,输出为hellwrldld,返回迭代器指向第一个d
remove_copy(beg,end,dest,val);
remove_copy_if(beg,end,dest,unaryPred);
-----------------------------------------------------------------
unique(beg,end);
unique(beg,end,unaryPred);//移去匹配元素的连续组,如输入为boohiss,输出为bohisss,返回第一个s之后的元素迭代器
unique_copy(beg,end,dest);
unique_copy(beg,end,dest,unaryPred);
-----------------------------------------------------------------
rotate(beg,mid,end);//如输入hissboo,mid为b,输出为boohiss,返回void
rotate_copy(beg,mid,end,dest);
-----------------------------------------------------------------
reverse(beg,end);
reverse_copy(beg,end,dest);//逆序
-----------------------------------------------------------------
random_shuffle(beg,end);
random_shuffle(beg,end,rand);//将序列随机排列
G.字典序的排列算法
next_permutation(beg,end);
next_permutation(beg,end,comp);//下一个排列
-----------------------------------------------------------------
prev_permutation(beg,end);
prev_permutation(beg,end);//上一个排列
H.有序序列的集合算法
includes(beg1,end1,beg2,end2);
includes(beg1,end1,beg2,end2,comp);//A包含B,返回true
set_union(beg1,end1,beg2,end2,dest);
set_union(beg1,end1,beg2,end2,dest,comp);//并集,A,B所有元素,但重复元素只出现一次
set_intersection(beg1,end1,beg2,end2,dest);
set_intersection(beg1,end1,beg2,end2,dest,comp);//交集,A,B中都存在元素的有序序列
set_difference(beg1,end1,beg2,end2,dest);
set_difference(beg1,end1,beg2,end2,dest,comp);//差集,A中有,B中没有的元素的有序集合
set_symmetric_difference(beg1,end1,beg2,end2,dest);
set_symmetric_difference(beg1,end1,beg2,end2,dest,comp);//并集的基础上去除公共部分的有序序列
I.最大/最小
min(val1,val2);
min(val1,val2,comp);
max(val1,val2);
max(val1,val2,comp);//值的比较
min_element(beg,end);
min_element(beg,end,comp);
max_element(beg,end);
max_element(beg,end,comp);//返回目标迭代器
J.算术算法
accumulate(beg,end,init);
accumulate(beg,end,init,binaryOp);//在初始值init下,输出序列的总和
inner_product(beg1,end1,beg2,init);
inner_product(beg1,end1,beg2,init,binOp1,binOp2);//2序列对应元素的乘积和
//如:(2,3,5,8),(1,2,3,4,5),结果:init+(2*1)+(3*2)+(5*3)+(8*4)
partial_sum(beg,end,dest);
partial_sum(beg,end,dest,binaryOp);//当前位置(不包含该位置)前得所有元素的和,累加和
adjacent_different(beg,end,dest);
adjacent_different(beg,end,dest,binaryOp);//除了第一个元素外,每个新元素都是当前元素与前一元素的差
- C++菜鸟学习笔记——算法篇
- 菜鸟学习c++—实现简单的冒泡排序和插入排序算法
- 菜鸟学习笔记——servlet
- kNN算法——菜鸟学习机器学习实战
- c语言学习笔记(14)——算法
- 数据结构(c语言版)学习笔记——排序算法
- 数据结构(c语言版)学习笔记——排序算法
- 菜鸟学习JVM(一)——垃圾回收算法
- 菜鸟学习JVM(一)——垃圾回收算法
- 菜鸟笔记之算法
- 跟随菜鸟学习C#——C#操作Excel
- 菜鸟学习c++—实现学生登陆管理系统
- 菜鸟学习笔记——function(index,value)的困扰
- 菜鸟学习笔记——Ajax初体验
- Hadoop学习笔记(1) ——菜鸟入门
- 菜鸟前端之路笔记1——学习路线
- AngularJs学习笔记——摘自菜鸟教程
- 菜鸟起飞——机器学习实战第二篇:k-近邻算法
- HQL与SQL的区别
- [总结]如何编写自解压脚本(脚本中嵌入二进制文件)
- Item 45 成员函数模板
- [转]Busybox-1.18.4的移植
- objective-c地址薄实例(运用NSString,NSArray等)
- C++菜鸟学习笔记——算法篇
- Floyd算法
- bash (4) declare getopts noclobber
- 理解一般指针和指向指针的指针
- XNA 的 3D 和 2D 游戏引擎(商业与开源)
- “一心一益”公益大赛引高校热潮 信息科技大学积极参与
- 什么是组件,什么是控件。以及他们的区别
- Cout输出的原理
- Cout输出的原理