容器自己定义了的算法
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. 【Python】一、除法问题及基本操作(逻辑与,if替代switch)及支持中文打印

    1.查看版本 C:\Users\XXX>python -V Python 2.7.1 2.除法问题(不要整除) from __future__ import division tmp=0x3ec ...

  2. php大力力 [048节] php一点支付开发资料,很散

    https://beecloud.cn/activity/jsbutton/?index=4&t=1441261629019 https://beecloud.cn/download/ php ...

  3. maya的卡通渲染

    为了统一工作流,给maya也做了个卡通shader:

  4. vi & vim复制,粘贴,剪切文本

    我经常用vi编辑器,但基本上还是windows的习惯,没有系统的学过其功能,今天遇到了文本的复制这没有办法了,查看一下解决如下: 引用文本: ----------------------------- ...

  5. MySQL的左连接、右连接和全连接的实现

    表student:+----+-----------+------+| id | name | age |+----+-----------+------+| 1 | Jim | 18 || 2 | ...

  6. $.ajax请求返回数据中status为200,回调的却是error?

    $.ajax({ type:'get',//使用get方法访问后台 dataType:'json',//访问json格式的数据 url:'http://job.hainan.net/api/recru ...

  7. B - I Hate It

    #include<cstdio> #include<string.h> using namespace std; int ans; ; ]; struct Node{ int ...

  8. 图片轮播(bootstrap)与 圆角搜索框(纯css)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  9. http 学习 1-2 chapter2-URL与资源

    URL是因特网资源的标准化名称.URL指向每一条电子信息,告诉他们位于何处,以及如何与之进行交互. URL语法,以及各种URL组件的含义及其所做的工作. 很多Web客户端都支持额URL快捷方式,包括相 ...

  10. This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.

    -- :::] This application is modifying the autolayout engine from a background thread, which can lead ...