STL算法概述
#include<algorithm> //C++标准库算法
#include<functional> //仿函数和函数配接器
1.nonmodifying algorithm 非变动性算法 (不改动元素,即只能读取)
2.modifying algorithm 变动性算法
3.removing algorithm 移除性算法
4.mutating algorithm 变序性算法
5.sorting algorithm 排序算法
6,sorted range algorithm 已序区间算法
7.numeric algorithm 数值算法
difference_type用于测定距离,区别正负
1.非变动性算法
(1) for_each(begin,end,Unary_func op) 具体见另外博客
(2) difference_type count (begin,end,const T&value); //返回value的个数
(3) difference_type count_if (begin,end,Unarypredicate op); //返回op为true的元素个数
(4) iterator min_element(begin,end); //默认less than
iterator min_element(begin,end,compFunc op); //op(elem1,elem2);
(5) iterator max_element(begin,end);
iterator max_element(begin,end,compFunc op);
(6) iterator find(begin,end,const T&value);
(7) iterator find_if(begin,end,UnaryPredicate op);
如果是已序区间用lower_bound(),upper_bound(),equal_range(),binary_search()可获更高性能
(8) Input_iterator search_n(begin,end,Size count,const T& value); //连续count个元素值全是value
Input_iterator search_n(begin,end,Size count,const T&value,BinaryPredicate op);
//连续count个元素造成op为true, op(elem,value)
(9) FowardIterator search(begin1,end1,begin2,end2); //在[begin1,end1)中寻找与[begin2,end2)相同的元素
FowardIterator search(begin1,end1,Searchbegin2,Searchend2,BinaryPredicate op);
//op(elem,searchElem),
(10) Forward_Iterator find_end(begin1,end1,searchBegin2,searchEnd2);
//[begin1,end1)中最后出现的[searchBegin2,searchEnd2)
Forward_Iterator find_end(begin1,end1,searchBegin2,searchEnd2,BinaryPredicate op);
//op(elem,searchElem);
(11)Find_first_of 查找与顺序无关。
Forward_Iterator find_first_of(begin1,end1,searchBegin2,searchEnd2)
//返回一个既在区间[begin1,end1)出现也在[searchBegin2,searchEnd2)出现的元素位置
Forward_Iterator find_first_of(begin1,end1,searchBegin2,searchEnd2,BinaryPredicate op);
//返回一个区间[begin1,end1)和区间[searchBegin2,searchEnd2)内进行op(elem,searchElem)为true
(12) InputIterator adjacant_find(begin,end); //返回连续两个相等元素的第一个位置
InputIterator adjacant_find(begin,end,BinaryPredicate op);
//op(elem,nextElem),连续两个元素使以下二元判断式的结果为true
(13) bool equal(begin1,end1,begin2);
bool equal(begin1,end1,begin2,BinaryPredicate op); //op(elem,cmpElem);
(14) pair<InputIterator1,InputIterator2> mismatch(InputIterator1 begin,InputIterator1 end,InputIterator2 cmpBeg)
返回[begin,end)和cmpBeg开头的区间第一组相异的对应元素
pair<InputIterator1,InputIterator2> mismatch(InputIterator1 begin,InputIterator1 end,InputIterator2 cmpBeg,
BinaryPredicate op);
op(elem,cmpElem); 返回使判断式为false的对应元素
(15) bool lexicographical_compare(begin1,end1,begin2,end2);
bool lexicographical_compare(begin1,end1,begin2,end2,ComFunc op);
op(elem1,elem2); elem1小于elem2则为true
字典顺序定义:
1.数量不同,如果第一个序列数量少,则为true
2.相等则false