1.STL算法详解

  • STL提供能在各种容器中通用的算法(大约有70种),如插入、删除、查找、排序等。算法就是函数模板,算法通过迭代器来操纵容器中的元素。许多算法操作的是容器上的一个区间(也可以是整个容器),因此需要两个参数,一个是区间起点元素的迭代器,另一个是区间终点元素的后面一个元素的迭代器。例如,排序和查找算法都需要这两个参数来指明待排序或待查找的区间。有的算法返回一个迭代器,例如,find算法在容器中查找一个元素,并返回一个指向该元素的迭代器。算法可以处理容器,也可以处理普通的数组。
  • 有的算法会改变其所作用的容器。例如:
    • copy:将一个容器的内容复制到另一个容器
    • remove:在容器中删除一个元素
    • random_shuffle:随机打乱容器中的元素
    • fill:用某个值填充容器
  • 有的算法不会改变其所作用的容器。例如:
    • find:在容器中查找元素
    • count_if:统计容器中符合某种条件的元素的个数
  • STL中的大部分常用算法都在头文件algorithm中定义。此外,头文件numeric中也有一些算法

2.find算法介绍

  • find算法和其他算法一样都是函数模板。find模板的原型如下:

        template<class InIt, class T> InIt find(InIt first, InIt last, const T &val);
    
  • 其功能可以是在迭代器first、last指定的容器的一个区间[first, last) 中,按顺序查找和val相等的元素。如果找到,就返回该元素的迭代器;如果找不到,就返回last。find模板使用运算符判断元素是否相等。因此,如果[first, last)区间中存放的是对象,则运算符应该被适当重载,使得两个对象可以用==运算符比较。find的用法实例如下:
        #include "iostream"#include "algorithm"#include "vector"using namespace std;int main(){int a[10] = {10, 20, 44, 66, 99, 101};vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);  // 此后v里放着4个元素:1,2,3,4vector<int>::iterator p;p = find(v.begin(), v.end(), 3);  // 在v中查找3if(p!=v.end())  // 若找不到,find返回 v.end()cout << *p << endl;  // 找到了p = find(v.begin(), v.end(), 9);  if(p == v.end())cout << "not found!\n";p = find(v.begin()+1, v.end()-1, 4); // 在,3 这两个元素中查找4cout << *p << endl;int *pp = find(a, a+4, 20);if(pp == a+4)cout << "not found" << endl;else    cout << *pp << endl;return 0;}
    
  • STL中还有一个常用的算法sort,用于对容器排序,其原型为:
        template<class_RandIt>void sort(_RandIt first, _RandIt last);
    
  • 该算法可以用来对区间[first, last)从小到大进行排序。下面两行程序就能对数组a排序:
        int a[4] = {3, 4, 0, 1};sort(a, a+4);
    

C++中的STL算法详解相关推荐

  1. algorithm中的排序算法详解

    文章目录 前言 一.algorithm是什么? 二.有哪些排序算法? sort random_shuffle merge reverse 总结 前言 雨下不停,爱意难眠,说一下algorithm中的几 ...

  2. JavaScript 中常见排序算法详解

    十大经典算法 一张图概括: 名词解释: n:数据规模 k:"桶"的个数 In-place:占用常数内存,不占用额外内存 Out-place:占用额外内存 稳定性:排序后2个相等键值 ...

  3. java break 在if 中使用_java中使用国密SM4算法详解

    前言 上次总结了一下加密算法的分类(加密算法有集中形式,各有什么不同?),现在我们用java语言实现一下SM4:无线局域网标准的分组数据算法.对称加密,密钥长度和分组长度均为128位. ps:我们既可 ...

  4. 聚类 python_python中实现k-means聚类算法详解

    算法优缺点: 优点:容易实现 缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢 使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他们的相近关系的,相近 ...

  5. STL 中map的用法详解

    STL 中map的用法详解 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可 ...

  6. 多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解

    多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解 1. 概览 在开始具体讨论卡尔曼滤波和匈牙利算法之前,首先我们来看一下基于检测的目标跟踪算法的大 ...

  7. 9. PKI - 三种密钥交换算法详解(RSA DHE ECDHE)及他们在SSL/TLS协议中的应用

    9. PKI - 三种密钥交换算法详解(RSA& DHE& ECDHE)及他们在SSL/TLS协议中的应用 RSA密钥交换算法 DHE密钥交换算法 ECDHE密钥交换算法 参考 密钥交 ...

  8. Matlab人脸检测算法详解

    这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...

  9. 图论-最短路Dijkstra算法详解超详 有图解

    整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...

最新文章

  1. 【强哥推荐】VSCode常用快捷键配置文件表,记得收藏
  2. 06.Spring 资源加载 - ResourceLoader
  3. 开发人员需知的Web缓存知识(转)
  4. 基于深度学习的交通标识别算法对比研究-TensorFlow2实现
  5. weblogic服务器启动报错
  6. 【渝粤教育】广东开放大学 机械制造基础 形成性考核 (55)
  7. 比特币的原理及运作机制
  8. spring整合rabbitMQ最新版
  9. hdu 2489 Minimal Ratio Tree
  10. What's the QPSK?
  11. 安全行业最全防火墙产品全家福
  12. python 爬虫 表格_爬虫数据表格
  13. Windows server 2008下查找 w3wp.exe对应的Appoolid
  14. 电脑编程教学_上村CNC电脑锣编程培训按工厂模式整套实训
  15. pandavan路由器升级php到7,中兴E8820S改spi刷Pandavan固件作为有线路由
  16. 阿里这套Java性能调优实战宝典,堪称教科书
  17. Python 函数参数引用(传值传址)
  18. 微信公众号开发教程java_微信公众号开发java框架:wx4j(入门篇)
  19. t480 拆触摸板_thinkpad t470怎么关闭触摸板?
  20. 什么是PLC软元件和软继电器

热门文章

  1. shell脚本--03免密疑云
  2. JS实现-页面数据无限加载
  3. iOS下bound,center和frame
  4. 删除 shiro url 上的JSESSIONID
  5. Nmap扫描教程之基础扫描详解
  6. 近年ERP软件公司腾飞的缘由
  7. python字符串格式化之学习笔记
  8. [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
  9. 极客新闻——04、WiFi万能钥匙万玉权:管理应该是“自下而上”
  10. 面试官:Spring AOP、AspectJ、CGLIB 都是什么鬼?它们有什么关系?