当前位置:   article > 正文

c++中STL的算法_cout(iterator begin, iterator end, unarypredicate

cout(iterator begin, iterator end, unarypredicate op)

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:

  1. class Multiple {
  2. private:
  3. T value;
  4. public:
  5. Multiple(const T & t) :value(t){}
  6. void operator()(T& elem) const{
  7. elem *= value;
  8. }
  9. };
(3)、for_each()返回值

template<class InputIt,class UnaryFunction >

UnaryFunctionfor_each( InputItfirst, InputItlast, UnaryFunction f );

eg:

  1. class SUM{
  2. private:
  3. long sum_d;
  4. public:
  5. SUM() :sum_d(0){}
  6. void operator()(int elem){
  7. sum_d += elem;
  8. }
  9. operator double(){
  10. return static_cast<double>(sum_d);
  11. }
  12. };
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、最大值和最小值算法:

最小值算法:

  1. Iterator min_element(Iterator beg,Iterator end)
  2. Iterator min_element(Iterator beg, Iterator end, compFunc op)
  • 1
  • 2

最大值算法:

  1. Iterator max_element(Iterator beg,Iterator end)
  2. Iterator max_element(Iterator beg, Iterator end, compFunc op)
eg:

  1. bool Absless(int elem1,int elem2){
  2. return abs(elem1) < abs(elem2);
  3. }
  4. int main(){
  5. vector<int> v{ 34, 31, 44, 21, 35, 45 ,-23};
  6. vector<int>::iterator result = min_element(v.begin(), v.end());//最小值
  7. result = min_element(v.begin(), v.end(),Absless);//最小绝对值
  8. }

1.4、搜寻算法:

方法1:

  1. Iterator find(Iterator begin, Iterator end, const T& value) //返回区间值为value的第一个元素
  2. Iterator find_if(Iterator begin, Iterator end, UnaryPredicate op) //寻找op值为真的第一个元素
Iterator find_if_not(Iterator begin, Iterator end, UnaryPredicate op) //寻找第一个是op返回false的元素
  • 1
  • 2
  • 3

方法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)
 
 
  • 1
  • 2

方法3:搜寻第一个子区间
//两个函数返回区间内和子区间完全匹配的子区间开头位置,找不到的话,返回end,若子序列为空,返回begin 
  1. Iterator search(Iterator1 begin, Iterator1 end, Iterator2 searchchbegin, Iterator2 searchchend)
  2. //2第二个函数在p为真的时候才执行。 
Iterator search(Iterator1 begin, Iterator1 end, Iterator2 searchchbegin, Iterator2 searchchend,BinaryPredicate p)
  • 1
  • 2

方法4:搜寻最后一个子区间
//1.返回区间【begin,end】中和【searchchbegin,searchchend】匹配的最后一个子区间的开头位置。搜索失败或空,返回end
  1. Iterator find_end(Iterator1 begin,Iterator1,end ,Iterator2 searchchbegin , Iterator2 searchend)
  2. //2.第二个函数只有在p为真的时候才有意义。
  3. Iterator find_end(Iterator1 begin,Iterator1,end ,Iterator2 searchchbegin , Iterator2 searchend,BinaryPredicate p)
  • 1
  • 2
  • 3

方法5:搜寻某些元素的第一次出现位置
//返回子区间[serachbegin,searchend]中任何元素在【begin,end】中出现的第一个位置,如果没有这样字的元素,返回end
  1. Iterator find_first_of(Iterator1 begin, Iterator1 end,Iterator2 searchchbegin,Iterator2 searchchend)
  2. //第二个函数只有在p为真的时候才有意义
  3. Iterator find_first_of(Iterator1 begin, Iterator1 end,Iterator2 searchchbegin,Iterator2 searchchend, BiaryPredicate p)
  • 1
  • 2
  • 3
  • 4

方法6:搜寻两个连续相等的元素
adjacent_find()

  1. //形式一
  2. template<class ForwardIt>
  3. ForwardIt adjacent_find(ForwardIt first, ForwardIt last)
  4. //形式二
  5. template<class ForwardIt, BinaryPredicate p>
  6. ForwardIt adjacent_find(ForwardIt first, ForwardIt last,BinaryPredicate p)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/920135
推荐阅读
相关标签
  

闽ICP备14008679号