YXXYUPO0C++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大,不然会报错IJY7H
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到it.b+3的元素拷贝到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 取对称差集(不相交集)

/

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

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

make_heap 堆化容器
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 按照某个具体规则重排容器内元素
互为逆运算,都调用一次的话,容器元素位置不变

时间: 2024-10-29 19:11:48

YXXYUPO0C++STL算法函数总结的相关文章

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

第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, class OutputIterator> OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result); 函数作用: 将[first,last)区间的元素拷贝至result开头的迭代器区间,并返回赋值

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

函数对象: 重载函数调用操作符的类.其对象常称为函数对象(function object),即它们是行为类似函数的对象. 一个类对象,表现出一个函数的特征,就是通过"对象名+(參数列表)"的方式使用一个类对象,假设没有上下文,全然能够把它看作一个函数对待. 这是通过重载类的operator()来实现的. "在标准库中.函数对象被广泛地使用以获得弹性".标准库中的非常多算法都能够使用函数对象或者函数来作为自定的回调行为: demo #include <iostr

c++ 提高4 map容器 共性机制 使用时机 比较| STL算法 算法基础仿函数 谓词 函数适配器 遍历算法

[本文谢绝转载] <大纲> STL 容器 map 容器的4中初始化 遍历 map容器 元素的删除观测map.insert返回值,方法123,已存在就报错,初始化方法4会覆盖 map的查找,异常处理 map容器的range返回两个迭代器 multimap案例,按照部门_增删员工信息 容器共性机制 把对象放到容器中,会自动执行拷贝构造函数 各个容器的使用时机 vector与deque的比较: 算法 算法基础 函数对象(仿函数) 函数对象 与普通函数的区别:--  相同之处 函数对象 与普通函数的区

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

函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)"的方式使用一个类对象,如果没有上下文,完全可以把它看作一个函数对待. 这是通过重载类的operator()来实现的. "在标准库中,函数对象被广泛地使用以获得弹性",标准库中的很多算法都可以使用函数对象或者函数来作为自定的回调行为: demo #include <iostrea

仿函数(函数对象)和STL算法

1仿函数可当作排序准则 程序员经常将某些class obect以有序的形式置于容器中或许你是 不能或不想反正你无法使用一般的operator<来对这些对象排序,你必须以某种特别规则通常基于某些成员函数此时仿函数派上用场例如: Class Person { Public: String firstname() const; String lastname() const; } Class personsortCriterion { Bool operator()(const Person& p

STL 算法中函数对象和谓词

STL 算法中函数对象和谓词 函数对象和谓词定义 函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)"的方式使用一个类对象,如果没有上下文,完全可以把它看作一个函数对待.          这是通过重载类的operator()来实现的.          "在标准库中,函数对象被广泛地使用以获得弹性",标准库中的很多算法都可以使用函数

STL算法之函数copy

STL算法之copy copy(beg, end, dest) //dest表示输入迭代器 #include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { int myints[] = { 10, 20, 30, 40, 50, 60, 70 }; vector<int> myvector; vector<int>::iter

STL算法 — sort

能使用STL的sort系列算法的前提是容器的迭代器必须为随机迭代器.所以,vector和deque天然适用.STL的sort算法采用了一些策略,在不同情况下采用不同的排序算法,以达到各种算法优势互补的效果.基本的原则是:数据量大时采用快速排序,数据量小时采用插入排序(这是对快排常用的一种优化策略),递归层次过深改用堆排序. 首先是插入排序.它的平均和最坏时间复杂度都为O(N2),量级小于千,那么插入排序还是一个不错的选择.SGI STL的插入排序默认以增序排列,另外还可以传入一个仿函数作为比较规

c++之STL(13) STL 算法 - 查找算法(4)find_first_of(b,e,sb,se) find_first_of(b,e,sb,se,bp)

find_first_of(b,e,sb,se) find_first_of(b,e,sb,se,bp) 使用逆向迭代器 没有find_last_of算法 STL 查找算法 find() find_if() search_n() search() find_end() find_first_of() adjacent_find() string 查找函数和STL查找算法的比较 string函数    STL算法 find()                find() rfind()