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

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

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

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

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. 最大最小操作

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

c++中常用的泛型算法的更多相关文章

  1. Java中常用的查找算法——顺序查找和二分查找

    Java中常用的查找算法——顺序查找和二分查找 神话丿小王子的博客 一.顺序查找: a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位 ...

  2. 今天给大家分享一下js中常用的基础算法

    今天给大家分享一下js中常用的基础算法,废话不多说,直接上代码: 1.两个数字调换顺序 ,b= function fun(a,b){ b = b - a ;// a = 2 ; b = 2 a = a ...

  3. C#中常用的排序算法的时间复杂度和空间复杂度

    常用的排序算法的时间复杂度和空间复杂度   常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 ...

  4. iOS标准库中常用数据结构和算法之查找

    参数: key: [in] 要查找的元素.base:[in] 数组元素的首地址.nelp: [in/out] 数组的元素个数指针.width: [in] 数组中每个元素的尺寸.compar: [in] ...

  5. stl中常用的排序算法

    #include"iostream" #include"vector" using namespace std; #include"string&qu ...

  6. 01java中常用的一些算法工具——map转xml和xml转map

    借鉴博客:https://blog.csdn.net/Goodbye_Youth/article/details/80937862 他这篇写的不错,多层嵌套的map也能转成xml 这篇也不错:http ...

  7. C++ Primer 读书笔记:第11章 泛型算法

    第11章 泛型算法 1.概述 泛型算法依赖于迭代器,而不是依赖容器,需要指定作用的区间,即[开始,结束),表示的区间,如上所示 此外还需要元素是可比的,如果元素本身是不可比的,那么可以自己定义比较函数 ...

  8. ACM 中常用的算法有哪些? 2014-08-21 21:15 40人阅读 评论(0) 收藏

    ACM 中常用的算法有哪些?作者: 张俊Michael 网络上流传的答案有很多,估计提问者也曾经去网上搜过.所以根据自己微薄的经验提点看法. 我ACM初期是训练编码能力,以水题为主(就是没有任何算法, ...

  9. NAND Flash中常用的纠错方式(ECC算法)

    Hanming,RS,BCH —— NAND Flash中常用的纠错方式 因为闪存中会有出错的可能,如果没有使用ECC模块,读出的数据和写入的数据会有不匹配的可能,也许一个文件中只有一两个bit不匹配 ...

随机推荐

  1. 高性价比 VPS virtwire Host

    自从bandwagonhost 低端VPS售罄后,很难找到一个 比较性价比高的host做梯子了.今天找到VirtWire Host,带一个独立IPv4,5$/y 的价格还是可以接收的.而且相对于ban ...

  2. 备份LeetCode OJ自己编写的代码

    常泡LC的朋友知道LC是不提供代码打包下载的,不像一般的OJ,可是我不备份代码就感觉不舒服- 其实我想说的是- 我自己写了抓取个人提交代码的小工具,放在GitCafe上了- 不知道大家有没有兴趣 ht ...

  3. MPU和CPU有什么区别?

    MPU(或称MP,微处理器)和CPU(中央处理器)同为处理器,但范畴不同. 计算机(即电脑)分为巨型机,大型机,中型机,小型机和微型计算机5类.这5类计算机的运算核心统称为CPU,而MPU只是微型计算 ...

  4. LINUX文件内容处理及文本编辑器vim

    Linux基本操作命令 echo命令 echo命令: 把echo后面的内容显示到屏幕. -n 显示内容的时候不显示每行结尾的回车 echo 内容 >> 文件名 表示把内容加到一个文件的末尾 ...

  5. Redis设计与实现:读书笔记之一

    第一部分:数据结构与对象 Redis支持的数据类型 字符串对象 列表对象 Hash对象 集合对象 有序集合对象 2.数据结构 Redis的所有数据类型都是: key-value pair 对象 Red ...

  6. yii2 配合bootstrap添加一个气泡

    添加一个气泡 1.bootstrap 官网:http://getbootstrap.com/ 2.bootstrap 中文官网:http://v3.bootcss.com/ 添加气泡主要需要用到 bo ...

  7. NodeJS缓冲区

    NodeJS缓冲区 JavaScript语言本身在I/O时只有字符串数据类型,没有二进制数据类型,但在处理流数据时,必须用到二进制数据,因此在Node中,定义了一个Buffer类作为存放二进制数据的缓 ...

  8. PHP02

    PHP02 1.虚拟主机配置完毕后,机器上的ip和localhost都会默认直接请求第一个虚拟主机 2.解析文本文件显示表格 将文本文件中的数据呈现在一个表格中 1)读取文件内容 包含文本的字符串数据 ...

  9. Android的Databinding-单向绑定

    两种方式实现观察绑定. 一.POJO类实现android.databinding.Observable,在属性set方法中调用notifyPropertyChanged(BR.lastName); 其 ...

  10. C# ReaderWriterLockSlim 实现

    其实ReaderWriterLockSlim的实现前段时间看了,当时不打算记录下来的,因为它的实现实在System.Core项目里面,而不是mscorlib项目.按照惯例我们还是先看看网上的一些说法吧 ...