Effective_STL 学习笔记(四十四) 尽量使用成员函数代替同名的算法
有些容器拥有和 STL 算法同名的成员函数。
关联容器提供了 count、find、lower_bound、upper_bound 和 euqal_range
list 提供了 remove、remove_if、unique、merge 和 reverse
大多数时候应该用成员函数代替手写算法,这样做的两个理由:
比起算法,它们与容器结合的更好(尤其是关联容器)
同名的算法很成员函数通常不是一样的
假设 set<int> 容纳一百万个元素,想找到元素 727 的第一次出现的位置
1 set<int> s; 2 . . . 3 set<int>::iterator i = s.find(727); // 使用成员函数 4 if( i != s.end() ) . . . 5 set<int>::iterator i = find( s.begin(), s.end(), 727 ); // 使用 find 算法 6 if( i != s.end()) . . .
使用成员函数花费对数时间(set实现为红黑树),使用算法将花费线性时间
STL 算法判断两个对象是否相同的方法检查的是它们是否相等,而关联容器是用等价来测试它们的 “同一性”
对于标准关联容器,选择成员函数而不是同名算法几个好处,首先,得到对数时间而不是线行时间的性能。其次,判断连个元素 “相同”使用的是等价,这是关联容器的默认定义。第三,当操纵 map 和 multimap 时,可以自动地只处理 key 值而不是(key, value)对。
list 的成员函数。每个被 list 作了特化的算法(remove、remove_if、unique、sort、merge 和 reverse)都要拷贝对象,而 list 的特别版本什么都没有拷贝;它们只是简单地操纵连接 list 的节点的指针。算法和成员函数的算法复杂度是相同的。
另外,list 的成员函数的行为和它们的同名算法的行为经常是不相同。如果真想从容器中清除对象,调用 remove、remove_if 和 unique 算法后,必须接着调用 erase 函数;但是,list 的 remove、remove_if 和 unique 成员函数真的去掉了元素,后面不再需要接着调用 erase
在 sort 算法和 list 的成员函数间的一个重要的区别是前者不能用于 list。作为单纯的双向迭代器, list 的迭代器不能传给 sort 算法。merge 算法和 list 的merge 成员函数之间也同样存在巨大差异
转载于:https://www.cnblogs.com/kidycharon/p/10052504.html
Effective_STL 学习笔记(四十四) 尽量使用成员函数代替同名的算法相关推荐
- Windows保护模式学习笔记(十四)—— 阶段测试
Windows保护模式学习笔记(十四)-- 阶段测试 题目一 解题步骤 题目二 解题步骤 题目一 描述:给定一个线性地址,和长度,读取内容 int ReadMemory(OUT BYTE* buffe ...
- OpenCV学习笔记(十四):重映射:remap( )
OpenCV学习笔记(十四):重映射:remap( ) 图像的坐标映射是通过原图像与目标图像之间建立一种映射关系,这种映射关系有两种,一种是计算原图像任意像素在映射后图像的坐标位置,另一种是计算变换后 ...
- QT学习笔记(十四):QLayout的属性介绍
QT学习笔记(十四):QLayout的属性介绍 主要包括QBoxLayout.和QGridLayout以及QFormLayout等的参数类似. 我主要说明一下QGridLayout在QtDesigne ...
- MATLAB学习笔记(十四)
MATLAB学习笔记(十四) 一.线性方程组求解 1.1 直接法 1.1.1 利用左除运算符 1.1.2 利用矩阵分解 1.2 迭代法 1.2.1 雅可比(Jacobi)迭代法 1.2.2 高斯-赛德 ...
- python数据挖掘学习笔记】十四.Scipy调用curve_fit实现曲线拟合
#2018-03-28 10:02:08 March Wednesday the 13 week, the 087 day SZ SSMR python数据挖掘学习笔记]十四.Scipy调用curve ...
- Spring Security技术栈学习笔记(十四)使用Spring Social集成QQ登录验证方式
上一篇文章<Spring Security技术栈开发企业级认证与授权(十三)Spring Social集成第三方登录验证开发流程介绍>主要是介绍了OAuth2协议的基本内容以及Spring ...
- Cty的Linux学习笔记(十四)
Linux学习笔记--第十四篇 环境变量配置文件: /etc/profile:预设了几个重要的变量,例如PATH,USER,LOGNAME,MAIL,INPUTRC,HOSTNAME,HISTSIZE ...
- 深度学习笔记(十四)—— 超参数优化[Hyperparameter Optimization]
这是深度学习笔记第十四篇,完整的笔记目录可以点击这里查看. 训练神经网络会涉及到许多超参数设置.神经网络中最常见的超参数包括: the initial learning rate lea ...
- Slicer学习笔记(十四)vtkMRMLVolumeNode 与 vtkImageData
Slicer学习笔记(十四)vtkMRMLVolumeNode 与 vtkImageData 1.Adding in MRML to Slicer 2.MRML Scene 3.MRML Nodes ...
最新文章
- 【深度学习的数学】交叉熵公式如何推导?
- 制作Python的安装模块
- 电工结业试卷_电工电子考试试(含答案).doc
- java Jsoup不能获取完整响应内容
- 事务传播特性和隔离级别
- sw二次开发 python_基于C#的SolidWorks二次开发.doc
- 数字通信同步技术的matlab与fpga实现_数字通信电缆行业规模情况及趋势分析(附报告目录)...
- [论文阅读] Annotation-Efficient Cell Counting
- mysql for windows_mysql安装教程-windows版
- 使用RandomAccessFile读写数据
- 1978-2019年中国省市恩格尔系数表分享
- 徽州区数字城管平台智慧管理城市
- 少儿学python 仿真秀_“在家学”仿真:使用Python进行SCDM脚本建模攻略
- 密码生成器(C语言实现)
- 开启虚拟机电脑自动重启的解决
- 职场英语常用100句
- Kubernetes 学习路径
- 什么是网络爬虫?有哪些作用?如何构建?
- java未来三年的工作计划,未来三年的工作计划
- 雷军 50 岁身价破 1000 亿:决定人生胜负的,是这 5 条规律
热门文章
- 将excel转为python的字典_python读取excel表并把数据转存为字典
- 只能计算机论文,谈计算机及人工智能技术发展-人工智能论文-计算机论文.docx...
- navicat premium 链接postgresql 无法加载表_PostgreSQL 每周新闻 2020311
- python二维元素向量_详解python Numpy中求向量和矩阵的范数
- matlab求距离判别函数,求MATLAB的逐步判别程序 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
- 华为2014校园招聘的机试题目
- Xlua文件在热更新中调用方法
- MYSQL和JAVA(课堂笔记)
- UVA 10269 Super Mario,最短路+动态规划
- Robert C. Martin关于UML、CASE的观点