C++泛型算法常用函数

转自:C++常用泛型算法

td中定义了很好几种顺序容器,它们自身也提供了一些操作,但是还有很多算法,容器本身没有提供。 而在algorithm头文件中,提供了许多算法,适用了大多数顺序容器。与c++11相比,很多函数在 c++17与c++20又改变了很多,下面内容基于c++11去简单介绍.

参考文献: https://en.cppreference.com或 https://zh.cppreference.com, 大家直接去这里看吧。。我就是拿的这里的!!!

 

    介绍之前,首先说明两点:

  • 关于泛型算法,必须明白一点:它们只会通过容器的迭代器来完成相关的操作,不会使用容器相关的任何操作。它意味着这些算法无论进行什么样的操作,容器的大小不会改变。
  • 泛型算法相关的函数中,经常需要传入谓词(predicate)参数。谓词指的是可调用的对象,返回bool类型,例如:函数名、函数指针、lambda函数、重载了operator()的类对象等。包含一个参数的谓词称为一元谓词(unary predicate), 包含两个参数的谓词称为二元谓词(binary predicate)。

泛型算法是STL库里面定义的一些算法,这些算法可以用一个接口操作各种数据类型,因此成为泛型算法。大多算法定义在头文件algorithm和numeric中。意思就是可以用一个接口操作各种类型的算法就是泛型算法。

1. 只遍历容器而不修改容器元素的算法:

a. 判断给定的容器是否满足给定条件

 

all_of(iter1_, iter2_, unaryPredicate_)         // 返回bool类型,如果容器内的所有元素, 对一元谓词为true,则返回true;
any_of(iter1_, iter2_, unaryPredicate_)         // 返回bool类型,如果容器任何一个元素, 对一元谓词为true,则返回true;
none_of(iter1_, iter2_, unaryPredicate_)       // 返回bool类型,如果容器内没有一个元素,对一元谓词为true,则返回true; (与all_of()正好相反)

b. 查找容器中满足条件的元素(如果不给定谓词参数,则会使用opretor==)
find(iter1_,iter2_, value)               // 返回迭代器,它指向第一个等于value的元素。
find_if(iter1_,iter2_, unary_predicate_)         // 返回迭代器,它指向第一个使一元谓词为true的元素。
find_if_not(iter1_, iter2_, unary_predicate_)      // 返回迭代器,它指向第一个使一元谓词为false的元素。
find_first_of(iter1, iter2, iter11, iter22, binaryPredicate_) // 返回迭代器, 在[iter1,iter2)中查找在[iter11,iter22)出现的任意一个元素, 返回第一个满足条件的元素的迭代器。
find_end(iter1, iter2, iter11, iter22, binaryPredicate_)  // 返回迭代器, 在 [iter1, iter2)中查找子序列[iter11, iter22), 返回满足条件的最后一个序列的起始元素。
fadjacent_find(iter1, iter2, binarayPredicate_)     // 返回迭代器, 在[iter1, iter2)中查找相邻的元素满足条件的;

c. 查找容器中满足条件元素的数目
cout(iter1, iter2, value)               // 返回满足条件的数目
cout_if(iter1, iter2, unaryPredidate_)          // 返回使一元谓词为true的数目

d. 对容器内的每一个元素执行相同的操作
for_each(iter1_, iter2_, unaryFunction_)       // 返回unaryFunction_, 该返回值对一般的函数或函数指针用处不大,对函数对象可能会有用;
                         // 作用:对指定范围内的所有元素依次执行一元函数操作.
for_each_n(iter1, n, unaryFunction_)         // 返回迭代器,指向n个元素的下一个元素, 功能类似.(在c++17中开始有)

 

从这里到最后的截图图片来自:https://zh.cppreference.com/w/cpp/algorithm, 发现这样有现成的,真的赖得写了啊。

 2. 修改序列的操作

 

 

3. 排序操作

 

4. 二分搜索操作

 

5.集合操作

 

6. 最大最小操作

 

另外,还有一些操作,不经常用,大家去推荐的网站看吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值