STL总是尽量做到节省内存且效率最高,在看本书中也越来越有深的体会。这里搜集一个stl中提高效率的方法。

1.对象的复制、析构等

如果将一个区间中的所有的对象析构掉,这是如果范围很大,每个析构都是无关痛痒的,对效率有很大伤害。

负责对象析构的destroy()有两个版本,第一个版本直接调用对象的析构函数;第二个版本,如果对象的析构是无关痛痒的(其__type_traits<T>是true),则什么也不做,否则,调用第一个版本。

同理复制操作,如果复制操作是trivial assignmentoperator,则复制直接以最快的内存对拷贝方式(memmove())完成。

2.算法

stl的算法优化非常好,针对不同的迭代器,如forward、bidirectional、random iterator等,因为元素的访问规则不一样,设计了不同的算法。

stl算法中经常使用双层架构,一般称呼上层函数为dispatch function(分派函数、派送函数),令函数传递调用过程中产生迭代器类型(iterator category)的临时对象,再利用编译器的参数推导机制(argumentdeduction),自动调用某个函数。

上层函数调用时不分类型对待,其中来根据参数或者模板的类别,调用下层这个函数就会根据传入的参数的类型分别重载不同的版本,来达到效率最高。一般嵌套调用的这个函数的某个参数为某个模板类型的value_type。

《STL源码剖析》学习--STL体现的思想相关推荐

  1. STL源码剖析学习七:stack和queue

    STL源码剖析学习七:stack和queue stack是一种先进后出的数据结构,只有一个出口. 允许新增.删除.获取最顶端的元素,没有任何办法可以存取其他元素,不允许有遍历行为. 缺省情况下用deq ...

  2. STL源码剖析学习二:空间配置器(allocator)

    STL源码剖析学习二:空间配置器(allocator) 标准接口: vlaue_type pointer const_pointer reference const_reference size_ty ...

  3. STL源码剖析学习之increment、decrement、dereference实现源码

    //STL之increment.decrement.dereference实现源码 //学习目的:STL实现原理.操作符(++i,i++,*等操作符的重载) //increment/dereferen ...

  4. STL源码剖析学习十四:算法之set相关算法

    STL中定义的set要求元素不得重复且已经排序 set算法要求的都是有序区间,但元素可以重复出现 另外提供的hash版本的set因为其元素无序,因此不能作为set函数的参数 set算法前4个参数分别表 ...

  5. STL源码剖析—学习记录

    提示:建议看完侯捷老师的STL标准库视频后,再看这本书,会看的下去一些!本人对其中重点内容和概念进行了提取,希望对一起前行的人有些许帮助,码字不易,欢迎点个赞呦! 文章目录 一.可能令你困惑的C++语 ...

  6. 《STL源码剖析》学习--6章--_rotate算法分析

     最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. <STL源码剖析>学习--6章--random access ite ...

  7. 《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法1

    最近在看侯捷的<STL源码剖析>,虽然感觉自己c++看得比较深一点,还是感觉还多东西不是那么明白,这里将一些细小的东西或者概念记录一下. 有些东西是根据<C++编程思想>理解的 ...

  8. 《STL源码剖析》学习--6章--power算法分析

    最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. 6章--power算法分析 书本中的算法如下所示: template <clas ...

  9. STL(C++标准库,体系结构及其内核分析)(STL源码剖析)(更新完毕)

    文章目录 介绍 Level 0:使用C++标准库 0 STL六大部件 0.1 六大部件之间的关系 0.2 复杂度 0.3 容器是前闭后开(左闭右开)区间 1 容器的结构与分类 1.1 使用容器Arra ...

  10. 《STL源码剖析》相关面试题总结

    一.STL简介 STL提供六大组件,彼此可以组合套用: 容器 容器就是各种数据结构,我就不多说,看看下面这张图回忆一下就好了,从实现角度看,STL容器是一种class template. 算法 各种常 ...

最新文章

  1. shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机...
  2. 前端的date类型后台接收_腾讯高级前端工程师支招,云开发实现小程序打赏和提现云开发实践...
  3. 女人必知:10个好习惯 让老公不想出轨
  4. Spark分布式安装
  5. Mybatis-generator自动生成
  6. 如何在Kubernetes中暴露服务访问 1
  7. java jdk 文档下载_JDK8 API文档(下载)
  8. PyTorch中nn.xx与nn.functional.xx的区别
  9. 阿里云首席安全科学家吴翰清的思考:弹性安全网络,构建下一代安全的互联网...
  10. 海外代理ip池购买推荐,易路s5海外ip代理如何提取使用?
  11. 5G NR 下行同步SSB(3)-- PBCH/MIB的用途
  12. [wordpress] Easy Custom Auto Excerpt Options 插件头图样式修改
  13. excel入门,如何玩转excel,你早该这么玩Excel笔记12
  14. H5移动端滑动表格固定表头和首列(纯css实现)
  15. js 点击按钮或者图片,实现图片上传并显示在页面上
  16. 基于node.js和Vue的运动装备网上商城
  17. unity水特效与标准资源包的下载导入
  18. Python之浅谈exec函数
  19. 配置ActiveX控件在网页中下载安装
  20. 云联惠认证时间_警方要求云联惠涉案成员限期投案,是自首寻求轻判的最佳时机...

热门文章

  1. 可视化-echarts流向图制作及recharts
  2. 【LeetCode从零单排】No 114 Flatten Binary Tree to Linked List
  3. Redis 集群分布式锁与 API 网关分布式限流
  4. eBay的Elasticsearch性能调优实践
  5. Redis 基数统计:HyperLogLog 小内存大用处
  6. codereview介绍
  7. 启动weblogic的错误:Could not obtain an exclusive lock to the embedded LDAP data files directory...
  8. 利用logistic回归构建申请信用评级案例
  9. Google首席科学家谈Google是怎么做深度学习的
  10. Logistic回归总结