C++STL算法函数总结
容器自己定义了的算法
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算法函数总结的更多相关文章
- 【STL源码学习】STL算法学习之二
第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, cla ...
- STL 算法罗列 (转)
非修改性序列操作(12个) 循环 for_each() 对序列中的每个元素执行某操作 查找 find() 在序列中找出某个值的第一次出现的位置 find_if() 在序列中找出符合某谓词的第一个元素 ...
- STL算法设计理念 - 函数对象和函数对象当参数和返回值
函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&qu ...
- STL 算法中函数对象和谓词
STL 算法中函数对象和谓词 函数对象和谓词定义 函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特 ...
- STL算法设计理念 - 函数对象和函数对象当參数和返回值
函数对象: 重载函数调用操作符的类.其对象常称为函数对象(function object),即它们是行为类似函数的对象. 一个类对象,表现出一个函数的特征,就是通过"对象名+(參数列表)&q ...
- STL算法之函数copy
STL算法之copy copy(beg, end, dest) #include <iostream> #include <algorithm> #include <ve ...
- STL算法
STL算法部分主要由头文 件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorit ...
- STL sort()函数
C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点.STL 排序算法同样需要保持高效.因此,对于不同的需求,STL提供的不同的函数,不同的函数,实现的算法又不尽相同 ...
- 【STL源码学习】STL算法学习之四
排序算法是STL算法中相当常用的一个类别,包括部分排序和全部排序算法,依据效率和应用场景进行选择. 明细: sort 函数原型: template <class RandomAccessIter ...
随机推荐
- 【Python】一、除法问题及基本操作(逻辑与,if替代switch)及支持中文打印
1.查看版本 C:\Users\XXX>python -V Python 2.7.1 2.除法问题(不要整除) from __future__ import division tmp=0x3ec ...
- php大力力 [048节] php一点支付开发资料,很散
https://beecloud.cn/activity/jsbutton/?index=4&t=1441261629019 https://beecloud.cn/download/ php ...
- maya的卡通渲染
为了统一工作流,给maya也做了个卡通shader:
- vi & vim复制,粘贴,剪切文本
我经常用vi编辑器,但基本上还是windows的习惯,没有系统的学过其功能,今天遇到了文本的复制这没有办法了,查看一下解决如下: 引用文本: ----------------------------- ...
- MySQL的左连接、右连接和全连接的实现
表student:+----+-----------+------+| id | name | age |+----+-----------+------+| 1 | Jim | 18 || 2 | ...
- $.ajax请求返回数据中status为200,回调的却是error?
$.ajax({ type:'get',//使用get方法访问后台 dataType:'json',//访问json格式的数据 url:'http://job.hainan.net/api/recru ...
- B - I Hate It
#include<cstdio> #include<string.h> using namespace std; int ans; ; ]; struct Node{ int ...
- 图片轮播(bootstrap)与 圆角搜索框(纯css)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- http 学习 1-2 chapter2-URL与资源
URL是因特网资源的标准化名称.URL指向每一条电子信息,告诉他们位于何处,以及如何与之进行交互. URL语法,以及各种URL组件的含义及其所做的工作. 很多Web客户端都支持额URL快捷方式,包括相 ...
- 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 ...