EffectiveC++-条款54:让自己熟悉包括TR1在内的标准程序库
一. 内容
新版本的 C++ 或许会具有某些新的有趣特性,但大部分新机能都是以标准程序库的扩充形式体现。如果我们不了解相关的信息,就很难成为一位高效的 C++ 程序员。
C++ 98 的标准程序库成分
:- STL(Standard Template Library,标准模板库),覆盖容器(containers 如 vector,string,map),迭代器(iterators),算法(algorithm 如 find,sort,transform),函数对象(function objects 如 less,greater),各种容器适配器(container adapters 如 stack,priority_queue)和函数对象适配器(function object adapters 如 mem_fun,not1).
- Iostreams。覆盖用户自定缓冲功能,国际化 I/O,以及预先定义好的对象 cin,cout,cerr 和 log。
- 国际化支持,包括多地区(multiple active locales)能力。像 wchar_t 和 wstring。
- 数值处理,包括复数模板(complex)和纯数值数组(val-array)。
- 异常阶层体系(exception hierarchy),包括 base class exception 及其 derived classes logic_error 和 runtime_error,以及更深继承的各个 classes。
- C89 标准程序库。1989年 C 标准程序库内的每一个东西也被覆盖于 C++ 内。
如果你对上述任何一项不是很熟悉,建议抽出一些时间好好阅读相关书籍。
新的机能被详细叙述于一份名为
TR1 (Technical Report 1)的文档
。它详细描述了 14 个新组件,统统放在 std 命名空间。比如 shared_ptr 全称为 std::tr1::shared_ptr。- 智能指针(smart pointer),包括 shared_ptr,weak_ptr…用于管理资源。
- tr1::function,表示任何可调用之物,也就是函数或者函数对象。
- tr1::bind,STL 绑定器,用于绑定函数指针。
- hash tables,用来实现 sets,multi-sets,maps 和 multi-maps。注意其中元素无序。
- 正则表达式(Regular expressions),包括以正则表达式为基础的字符串查找和替换。
- tuples(变量组),这是 pair template 的升级版,可用于持有任意个对象。
- tr1::array,本质上是一个 STL 化的数组。
- tr1::mem_fn,这是一个语句构造上与成员函数指针一致的东西。
- tr1::reference_wrapper,它可以让容器像持有 reference 一样。
- 随机数(random number),它大大超越了 C 的 rand 函数。
- 数学特殊函数,包括 Lagureere 多项式,Bessel 函数,完全椭圆积分,以及更多的函数。
- C99 兼容扩充。这是一大堆函数和模板(templates),用来将许多新的 C99 程序库特性带进 C++。
- type traits,一组 traits classes,用以提供类型的编译期信息。
- tr1::result_of,这是一个 template,用以推导函数调用的返回类型。
但注意 TR1 只是一份文档,它所规范的那些机能,还需要编译器去实现。而且可能已经被更新,最新的信息可以去咨询相关网站。有些当前编译期未提供的机能,可以看看
Boost 程序库
,相信你会大有收获。
二. 总结
- C++ 标准程序库的主要机能由 STL,iostreams,locales 组成。并包括 C99 标准程序库。
- TR1 添加了智能指针(例如 tr1::shared_ptr),一般化函数指针(tr1::function),hash-based 容器,正则表达式(regular expressions)以及另外 10 个组件的支持。
- TR1 自身只是一份规范,为获得 TR1 提供的好处,你需要一份实物。一个好的实物来源是 Boost。
EffectiveC++-条款54:让自己熟悉包括TR1在内的标准程序库相关推荐
- 计算精确,完全可以作为包括高速公路在内的卵型曲线坐标计算。
简介: 在高速公路立交平面线型中,现越来越多采用卵形曲线这一线型形式,而卵形曲线坐标的计算在现有相关书籍中却又很少提到,这就为施工中的坐标计算及放样增加了较大难度,为解决此难道,我在实践中通过对缓和曲 ...
- 可以用计算机进行模拟实验,随着信息技术的发展,包括核实验在内的许多科学研究都可以用计算机进行模拟实验, - 问答库...
问题: [单选] 随着信息技术的发展,包括核实验在内的许多科学研究都可以用计算机进行模拟实验,这样既可以达到实验效果,又可以节省实验费用,降低实验风险.从认识角度看,上述事实说明(). A . 人们可 ...
- ASP.NET 2.0 - 如何于网页上新增包括图片在内的数据至数据库
我们通常会在数据库数据表内储存文数字之类的数据,不过在某些时候,我们也会直接将照片等二进制影像数据储存在字段中.有使用许多朋友询问,在网页上新增数据记录时,如何让用户能够一并选取图片并写入varbin ...
- 2020年亚马逊全球投入超过7亿美元,用于打击包括售假在内的欺诈行为
亚马逊发布了2020品牌保护报告,全面沟通亚马逊如何确保全球消费者在亚马逊商城中购买到正品.亚马逊在品牌保护专业团队搭建和行业领先的机器学习技术方面进行了大量投入,以主动保护消费者.品牌及卖家免受售假 ...
- EffectiveC++-条款52:写了 placement new 也要写 placement delete
一. 内容 placement new 和 placement delete 在 C++ 中并不常见,如果不熟悉它们,不要感到害怕和忧虑. 回忆条款16和17,当你写一个 new 表达式时: FStr ...
- EffectiveC++-条款39:明智而审慎地使用 private 继承
一. 内容 对于 public 继承,条款32曾论证过是 is-a 关系.而对于 private 继承,显然并不是 is-a 的关系. 我们先看看 private 继承的意义 如果 derived c ...
- EffectiveC++-条款51:编写 new 和 delete 时需固守常规
一. 内容 条款50已经解释了什么时候你需要写个自定义的 new 和 delete,但没有解释你编写时应该遵守什么样的规则,接下来我们将介绍其中的规则. 对于 operator new: operat ...
- EffectiveC++-条款01:视C++为一个语言联邦
一. 内容 C++ 最初的名字为 C with Classes. 今天的 C++ 已经是个 多重 范型 编程语言 同时支持 过程形式(procedural) 面向对象(object-oriented) ...
- effectivec++条款18,让接口容易被正确使用,不宜被吴勇
test* create_test();shared_ptr<test> create_test();//下面的接口比上面的接口要好 auto_ptr<test> create ...
最新文章
- 一:搭建一套免费的serverless网站
- 【MM模块】Blocking Reasons 冻结原因
- java斐波那契查找_详解Java Fibonacci Search斐波那契搜索算法代码实现
- spring配置数据源(交给spring容器完成)
- Laravel大型项目系列教程(三)之发表文章
- spring框架(六)之拦截器
- php 数组排序 按值,php – 按值排序数组
- 大数据技术之 Kafka (第 3 章 Kafka 架构深入 ) Kafka 生产者
- 【Python】Python中的类型转换
- 设置固定高度_防排烟系统的设置,前室、楼梯间、避难层!设置要求全记住!...
- 2.3 快速搭建你的第一个系统,并进行迭代
- 命令行编译_[Bazel]自定义命令行编译标志
- [转]Thrift连接池实现
- html一行文字布局,HTML页面文字布局与文字效果
- 搭建本地以图搜图服务
- redis 安装以及redis desktop manger 连接
- Corona SDK 游戏开发引擎介绍
- python做学生管理系统数据库模型_数据库建模:学生信息系统搭建实验
- 设置elment ui plus 的el table的边框线
- 反向比例运算电路微分关系_干货|电源工程师必备求生技能——经典20种模拟电路...