容器自己定义了的算法
vector:swap
list:swap,merge,splice,remove,remove_if,reverse,unique
deque:swap
map,set,multiset,multimap:find,count,lower_bound,upper_bound,equal_bound(返回pair<lower_bound,upper_bound>)

all_of
any_of
none_of
for_each
find(it.b,it.e,val)
find_if
find_if_not
find_end(it1.b,it1.e,it2.b,it2.e) 找最后一个子列(it2是子列)。返回子列开始位置迭代器

find_first_of(it1.b,it1.e,it2.b,it2.e) 找第一个存在于子列中的元素(不是找第一个子列):  遍历it1中的元素。当找到一个元素存在于it2中就结束。返回指向此元素的迭代器

adjacent_find 找到第一对相等元素返回迭代器
count
count_if 使用方法跟find类似
mismatch 找两个容器中对应位置第一个不相等元素的位置(返回 pair<it1, it2>)
mismatch(it1.b,it1.e,it2.b) 实现里没有对it2判断是否到it2.end,如果it2.size()比it1.size()小的话。编译器会报错
因此要把较长的容器放在第三个参数里
equal(it1.b,it1.e,it2.b) 如果2个容器对应位置元素相等返回true
同mismatch 要把较长的容器放在第三个参数里
is_permutation(it.b,it.e,it2.b) 判断2个容器的元素,全相等返回true
不看顺序,只比较元素,只比较it.size()个。如果it.size()比it2.size()大。肯定返回false
search 与find_end一样.不过是找第一个子列
search_n 找连续n个满足条件的:search_n(iVec.b,iVec.e,3,4); 找连续3个4的位置(要连续),返回指向第一个4的位置的迭代器
copy(it.b,it.e,it2.b) 拷贝第一个区间到第二个容器.要保证第二个容器比1大,不然会报错
copy_n(it.b,n,it2.b) 拷贝it.b开始n个长度的元素到it2.b
copy_if(it.b,it.e,it2.b,pre)/pre是条件。把it.b到it.e的元素满足pre的拷贝到it2
copy_backward(it.b,it.b+3,it2.e) 从后往前拷贝.将it.b+3到it.b的元素拷贝到it.e-1开始3个 .it--

swap 交换数据
swap_range 交换一段区间内数据
iter_swap 交换迭代器
transform 对第一个容器的元素处理。处理之后存入另一个容器

replace 相等则替换元素
replace(it.b,it.e,old val,new val)
replace_if 满足条件则替换
replace(it.b,it.e,pre,new val)
replace_copy 复制元素到第二个容器,相等则替换第二个容器元素
replace_copy_if 复制元素到第二个容器,满足条件则替换第二个容器元素

fill 把容器区间内的元素赋值(会把原数据修改了)
fill(it.b,it.e,val)
fill_n(it,n,val) 把容器某个位置开始连续N个元素赋值

generate(it.b,it.e,fun) 用函数返回值给区间赋值
generate_n(it.b,n,fun) 用函数返回值从某位置开始n个元素赋值

remove 删除元素(所有) 返回一个迭代器。指向容器最后的后一个位置(容器size不变。所以返回的迭代器后面还有数据)
remove_if
remove_copy 复制元素到第二个容器,相等则删除(如果此容器个数比第一个容器移除数据后的个数要多。后面还会有数据)
remove_copy_if

unique 把相邻重复的元素删除。一般先sort在unique(所有相邻重复)
unique_copy

reverse 将容器区间内元素逆序
reverse_copy

rotate(it.b,it.b+1,it.e) 将容器区间内元素旋转
其实就是将b-b+1的元素放到it.e前
rotate_copy

random_shuffle //将元素随机重排(一般使用这个)
shuffle
srand(GetTickCount())//设置随机数种子((GetTickCount()在windows.h头文件)
random_shuffle(it.b,it.e,[](int a){return rand()%a;});

partition(it.b,it.e,pre) 按规则分割容器。前半部分是满足条件的。后半部分不满足条件
is_partitioned(it.b,it.e,pre) 是否按规则划分好。返回bool
stable_partiton 稳定划分
partition_copy(it.b,it.e,it2.b,it3.b,pre)
划分好存入另外俩个容器(一个装满足条件,另一个存不满足条件)原容器不变
partition_point  返回false的第一个位置迭代器

sort
stable_sort 稳定排序

partial_sort(it.b,it.n,it.e) 将b到e全部排序只取前n个(实现是用堆排序)
如果只排前N个是sort(it.b,it.n)

partial_sort_copy(it1.b,it1.e,it2.b,it2.e) 结果存入另一个容器
it1.b到it.e表示要排序的区间.it2.b,it.e是只取的区间
partial_sort_copy(s.b,s.e,d.b,d.b+3)//将s所有元素排序,取前3个拷贝到d里

is_sorted 是否排序,返回bool
is_sorted_until !!返回迭代器 (其实就是遍历容器元素,遇到没排序元素就结束) 对应partial_sort

nth_element(it.b,it.n,it.e) 找第n小的元素并把他放在第n个位置(在vs里面他还是全部排序了)

lower_bound 查找第一个大于等于某个元素值的位置
upper_bound 查找第一个大鱼某个元素值的元素
equal_range pair<iter,iter>
binary_search 二分查找元素

/都要先排序
merge 合并两个容器(必须2个容器元素有序且规则一致),存入第三个容器,原容器不变
merge(it1.b,it1.e,it2.b,it2.e,it3)

inplace_merge 对一个容器内的两部分数据归并(需要保证两部分数据分别有序)

includes(it1.b,it1.e,it2.b,it2.e) (it1跟it2必须有序)判断it1是否包含it2(it1>=it2)返回bool

set_union 去掉重复元素后合并(重复部分还会取一份)
set_intersection 取两个容器交集(只取重复部分)
set_difference(it1.b,it1.e,it2.b,it2.e,it3.b)取两个容器差集(取it1部分的差集)
set_symmetric_difference 取对称差集(不相交集)

/

make_heap 堆化容器

push_heap 往堆化容器内添加元素(要先堆化才能用)
Vect.push_back
push_heap(vect.b,vec.e)

pop_heap 从堆化容器内弹出元素,!!不会删除元素(要先堆化才能用)
pop_heap会做2件事
1.首位交换
2.把首元素下沉

sort_heap 堆排序(对已经堆化的容器进行排序)
is_heap 容器是否堆化
is_heap_until 判断容器前面N个元素是否堆化

min 求两个元素最小值,入参是值,返回值也是值
max
minmax 求区间的最小最大值返回的是pair<minVal,maxVal>,返回的是值的pair类型
min_element 求区间内元素最小值,入参是迭代器,返回值也是迭代器
minmax_element 求区间的最小最大值返回的是pair<it1,it2>,返回的是迭代器的pair类型

lexicographical_compare 字典比较数据,比较规则同两个字符串比较一样
(it1.b,it1.e,it2.b,it2.e)只比较it1.b和it2.b。it1.b<t2.b返回true
next_permutation 按照某个具体规则重排容器内元素
prev_permutation 按照某个具体规则重排容器内元素
互为逆运算,都调用一次的话,容器元素位置不变

C++STL算法函数总结的更多相关文章

  1. 【STL源码学习】STL算法学习之二

    第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, cla ...

  2. STL 算法罗列 (转)

    非修改性序列操作(12个) 循环 for_each() 对序列中的每个元素执行某操作 查找 find() 在序列中找出某个值的第一次出现的位置 find_if() 在序列中找出符合某谓词的第一个元素 ...

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

    函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&qu ...

  4. STL 算法中函数对象和谓词

    STL 算法中函数对象和谓词 函数对象和谓词定义 函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特 ...

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

    函数对象: 重载函数调用操作符的类.其对象常称为函数对象(function object),即它们是行为类似函数的对象. 一个类对象,表现出一个函数的特征,就是通过"对象名+(參数列表)&q ...

  6. STL算法之函数copy

    STL算法之copy copy(beg, end, dest) #include <iostream> #include <algorithm> #include <ve ...

  7. STL算法

    STL算法部分主要由头文 件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorit ...

  8. STL sort()函数

    C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点.STL 排序算法同样需要保持高效.因此,对于不同的需求,STL提供的不同的函数,不同的函数,实现的算法又不尽相同 ...

  9. 【STL源码学习】STL算法学习之四

    排序算法是STL算法中相当常用的一个类别,包括部分排序和全部排序算法,依据效率和应用场景进行选择. 明细: sort 函数原型: template <class RandomAccessIter ...

随机推荐

  1. C++注意事项

    1.static和const不能同时修饰类的成员函数(static int getde()const;) 分析:原因在于const会在函数中添加一个隐式参数const this*,而static是没有 ...

  2. Myeclipse中导入新项目报叹号

    Myeclipse中导入新项目报红色叹号 原因是导入项目中,有的jar路径不对, 在上图中,先把报错的jar移除,之后将JRE开头的那个library移除,最后点击add Library,选择jre. ...

  3. foreach为什么要实现IEnumerable接口而不是直接用IEnumerator接口

    在.Net中,要想被foreach遍历,那么目标对象要实现IEnumerable或IEnumerable<T>接口,这个接口有一个方法,GetEnumerator(),返回一个IEnume ...

  4. IC卡复位应答ATR解析

    输入的是ATR,通过解析输出TA.TB.TC.TD的信息. 似乎没有容错处理,~~~~(>_<)~~~~ #include <stdio.h> #define TA_BIT ( ...

  5. CLR via C# 3rd - 02 - Building, Packaging, Deploying, and Administering Applications and Types

    1. C# Compiler - CSC.exe            csc.exe /out:Program.exe /t:exe /r:MSCorLib.dll Program.cs       ...

  6. R语言实现 广义加性模型 Generalized Additive Models(GAM) 入门

    转载请说明. R语言官网:http://www.r-project.org/ R语言软件下载:http://ftp.ctex.org/mirrors/CRAN/         注:下载时点击 ins ...

  7. myeclipse里的调试快捷键

    好多时候在调试代码时,有的时候只会用F5,其他的快捷键却一概不知.今天百度查了一下其他快捷键调试的作用,总结如下 F5 (setp into ): 跳入当前执行的方法中 F6 (step over): ...

  8. this其实是js的一个对象谁调用它它就指向谁

    本人看了一下,感觉对this解释的有点复杂了,因此,本人在此给this一个简单易于理解的定义. 因为上面计算出来的结果不符合我们的习惯,并且负值在计算的时候会影响正确性,现在我们给这个结果加上180 ...

  9. 2016.12.01 搭建dendroid备忘

    在2014年的时候看了freebuf的那篇,感觉很6,2014年搭了就一遍成功了,事过两年,物是人非啊,2016搞了云,没事测试,搞了一遍死活不成功,第二天测试成功,过程逗比坎坷,没什么难的 //环境 ...

  10. id生成策略 id工具类

    import java.util.Random; /** * 各种id生成策略 * <p>Title: IDUtils</p> * <p>Description: ...