赞
踩
STL算法库:
1、非修改式序列算法:不该懂容器中的元素次序和元素值,通过input迭代器和forward迭代器完成工作;(所以标准容器)
2、修改式序列算法:不直接容器中改变元素值,包含移除(逻辑)性质【不改变容器大小和元素个数】或删除性质算法,
3、排序和相关算法:包含多个排序函数和其他各种函数,包括集合操作等。不能以关联容器作为目标,因为关联容器元素被视为常数,不能变更
4、通用数字算法:包括区间的内容累积、内部乘积、小计、计算相邻对象差等函数;
1、非修改式序列算法
1.1、for_each 实现对区间[begin,end]中每个元素均调用进程op.
(1)、使用普通函数;
for_each(Iteratorbegin,iteratorend , proc op)
(2)、使用仿函数;
for_each(begin,end, Multiple<int>())
仿函数:就是一个类使用时对象调用函数,又称为函数对象。其实现类中包含函数operator(),这个类就有了类似函数的行为。是
stl六大组件(容器,配置器,迭代器,算法,配接器,仿函数)之一。
eg:
- class Multiple {
- private:
- T value;
- public:
- Multiple(const T & t) :value(t){}
- void operator()(T& elem) const{
- elem *= value;
-
- }
- };
(3)、for_each()返回值
template<class InputIt,class UnaryFunction >
UnaryFunctionfor_each( InputItfirst, InputItlast, UnaryFunction f );
eg:
- class SUM{
- private:
- long sum_d;
- public:
- SUM() :sum_d(0){}
- void operator()(int elem){
- sum_d += elem;
- }
- operator double(){
- return static_cast<double>(sum_d);
- }
- };
for_each(begin,end, SUM())1.2、元素计数:
count(Iteratorbegin,Iteratorend ,const T& value) //在区间中统计值为value的个数eg : value:2
count_if(Iteratorbegin ,Iteratorend ,UnaryPredicate op) //只有当op参数为真的时候,bool类型的返回值,才统计元素的个数
eg: op:bind2nd(greater<int>(),2)
1.3、最大值和最小值算法:
最小值算法:
- Iterator min_element(Iterator beg,Iterator end)
- Iterator min_element(Iterator beg, Iterator end, compFunc op)
最大值算法:
- Iterator max_element(Iterator beg,Iterator end)
- Iterator max_element(Iterator beg, Iterator end, compFunc op)
eg:
- bool Absless(int elem1,int elem2){
- return abs(elem1) < abs(elem2);
- }
- int main(){
- vector<int> v{ 34, 31, 44, 21, 35, 45 ,-23};
- vector<int>::iterator result = min_element(v.begin(), v.end());//最小值
- result = min_element(v.begin(), v.end(),Absless);//最小绝对值
-
-
- }
1.4、搜寻算法:
方法1:
- Iterator find(Iterator begin, Iterator end, const T& value) //返回区间值为value的第一个元素
- Iterator find_if(Iterator begin, Iterator end, UnaryPredicate op) //寻找op值为真的第一个元素
Iterator find_if_not(Iterator begin, Iterator end, UnaryPredicate op) //寻找第一个是op返回false的元素
方法2:
//返回区间中“连续count个值为value”的序列的首位置,如果不存在,返回end
Iterator search_n(Iterator begin, Iterator end,Size count,constT& value)
//使用区间中的每一个元素和value的比较,返回区间中满足op为真的连续count个元素value的序列的开头位置,不满足返回end
Iterator search_n(Iterator begin, Iterator end,Size count,constT& value,BinaryPredicate p)
//两个函数返回区间内和子区间完全匹配的子区间开头位置,找不到的话,返回end,若子序列为空,返回begin
- Iterator search(Iterator1 begin, Iterator1 end, Iterator2 searchchbegin, Iterator2 searchchend)
- //2第二个函数在p为真的时候才执行。
Iterator search(Iterator1 begin, Iterator1 end, Iterator2 searchchbegin, Iterator2 searchchend,BinaryPredicate p)
//1.返回区间【begin,end】中和【searchchbegin,searchchend】匹配的最后一个子区间的开头位置。搜索失败或空,返回end.
- Iterator find_end(Iterator1 begin,Iterator1,end ,Iterator2 searchchbegin , Iterator2 searchend)
- //2.第二个函数只有在p为真的时候才有意义。
- Iterator find_end(Iterator1 begin,Iterator1,end ,Iterator2 searchchbegin , Iterator2 searchend,BinaryPredicate p)
//返回子区间[serachbegin,searchend]中任何元素在【begin,end】中出现的第一个位置,如果没有这样字的元素,返回end.
- Iterator find_first_of(Iterator1 begin, Iterator1 end,Iterator2 searchchbegin,Iterator2 searchchend)
- //第二个函数只有在p为真的时候才有意义
- Iterator find_first_of(Iterator1 begin, Iterator1 end,Iterator2 searchchbegin,Iterator2 searchchend, BiaryPredicate p)
adjacent_find()
:
- //形式一
- template<class ForwardIt>
- ForwardIt adjacent_find(ForwardIt first, ForwardIt last)
- //形式二
- template<class ForwardIt, BinaryPredicate p>
- ForwardIt adjacent_find(ForwardIt first, ForwardIt last,BinaryPredicate p)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。