Effective C++ 49,50
49.熟悉标准库。
C++标准库非常大。
首先标准库中函数非常多,为了避免名字冲突。使用命名空间std。而之前的库函数都存放于< .h>中,如今成为伪标准库。而不能直接将这些头文件所有直接加入命名空间,标准委员会仅仅能又一次创建了不带.h的头文件。对于C中头文件採用相同的方法,可是每一个名字前加入一个c。如C中的<string.h>变成了<cstring>。旧的c++头文件是官方反对使用的,但旧的c头文件不是,为了保持对C的兼容性。
如 <string.h>是旧的C头文件,相应的是基于char*的字符串处理函数,<string>是包括了std的C++头文件。相应的是新的string类,而<cstring>是C头文件的std版本号,但这里没有string类的旧c++版本号,由于官方不推荐这样做。
第二。库中差点儿都是模版。如iostream,操作字符流。流类实际就是类模版,在实例化流类的时候指定字符类型。
即使是string,事实上也是一个模版。类型參数限定了每一个string类中的字符类型。string的类型声明是:
typedef basic_string<char, char_traits<char>, allocator<char> >
string;
这里的字符类型与之前iostream中的字符类型是一个意思,它不是指char,指的是一个流中的字符,这里字符类型确定其參数,字符类型指的是字符集。由于不同的字符集在实现的细节上不同,如特殊的文件结束字符。拷贝他们的数组的最有效方式等。这些特征在标准中被称为traits。然后还有string对象运行动态内存分配的方法,使用一个Allocator參数。而Allocator类型的对象被用来分配和释放string对象的内存,其是一个内存管理器。不要手动的声明标准库中的不论什么部分。
Iostream。和传统的Iostream相比。它已经被模版化,继承层次结构也进行了改动。添加了抛出异常的能力。支持string(通过stringstream)和国际化(通过locales)。
新的Iostream能够将string和文件当作流,还能够对流的行为做更广泛的控制,包含缓存和初始化。
容器。标准库中提供了一下的高效实现。vector,list,queue,stack,deque,map,set和bitset。string是容器。对容器的不论什么操作都适用于string。标准库的实现是高效的。使用容器能够消除动态分配内存造成的内存泄漏。
算法,标准库中提供了大量的简易方法,称为algorithm,实际为函数模版。当中大多数适用于库中全部容器以及内建数组。算法将容器的内容作为序列,每一个算法能够应用与一个容器中全部值相应的一个序列。或者一个子序列。
标准算法有,for_each 为序列中的每一个元素调用某个函数。 find 在序列中查找包括某个值的第一个位置, count_if 计算序列中满足某个判定为真的元素的数量。equal 推断两个序列包括的元素的值是否全然相等,search 在一个序列中找出某个子序列的起始位置,copy 拷贝一个序列到还有一个,
unique 在序列中删除反复值, rotate 旋转序列中的值,sort 对序列中的值排序。等等。和容器操作一样,算法也有性能保证。
对国际化的支持。提供有助于开发出国际化软件的特性。支持国际化的最基本的构件是facets 和 locales 。
facets描写叙述的是对一种文化要处理哪些特性。包含排序规则(即某些地区字符集中的字符应该怎样排序),日期和时间应该怎样表示,数字和货币值应该怎样表示。怎样将信息表示符映射成明白的语言信息,等等。locales 将多组facets捆绑在一起,facets是指前面说到的那些特性中的一个,而locales 表示多个facets组成的一个对于某个国家的规则,若一个locales表示美国人是怎样解决前面几个问题的。
对于数字处理的支持。C++库中为复数类和专门针对数值编程而设计的特殊数组提供了模版。如valarray 类型的对象能够用来保存能够随意混叠的元素,
诊断支持。标准库支持三种报错方式:C的断言。错误号,例外 exception 。例外先派生出 logic_error 和 runtime_error ,然后再有这两个类派生出详细的错误类型。logic_error 表示软件中的逻辑错误,理论上能够通过更细致的程序设计来防止。runtime_error 类型的例外为执行时才干发现的错误。
标准库中的容器和算法这部分一般被称为标准模版库 STL 。
STL是标准库中最具创新的部分,它的体系结构具有扩展性。依照STL中的规范,能够进行非常多扩展。
50.提高对C++的认识。
C++设计时的首要目标:与C的兼容性。效率,和传统开发工具及环境的兼容性,解决真实问题的可应用性(即面向对象)。
以上目标阐明了C++语言中大量的实现细节。如,为什么隐式生成的拷贝构造函数和赋值运算符要像如今这样工作,尤其是指针产生的浅拷贝问题?由于这是C对struct的拷贝和赋值的方式,要与C兼容。为什么析构函数不自己主动声明为virtual,为什么实现细节必须出如今类的定义中?由于不这样做会带来性能上的损失。效率非常重要。为什么C++不能检測非局部静态对象间的初始化依赖关系?由于C++支持单独编译(即,分开编译源模块。然后将多个目标文件链接起来,形成可运行程序),依赖现有的链接器。不会程序数据打交道,所以c++编译器差点儿不可能知道整个程序的一切情况。为什么C++不让程序猿从一些繁杂事务如内存管理和低级指针操作中解脱出来?由于一些程序猿须要这些处理能力,一个真正的程序猿的须要自关重要。
Effective C++ 49,50的更多相关文章
- hdu 3555 Bomb(不要49,数位DP)
Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submi ...
- 【转】最全的 pip 使用指南,50% 你可能没用过
[转]最全的 pip 使用指南,50% 你可能没用过 所有的 Python 开发者都清楚,Python 之所以如此受欢迎,能够在众多高级语言中,脱颖而出,除了语法简单,上手容易之外,更多还要归功于 P ...
- EC读书笔记系列之19:条款49、50、51、52
条款49 了解new-handler的行为 记住: ★set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被调用 ★Nothrow new是一个颇为局限的工具,∵其只适用于内存 ...
- 基于requirejs+bluebird,50行代码实现轻巧实用的前端CMD加载器
首先是github地址,可以用git克隆命令也可以直接在git页面下载 https://github.com/kazetotori/js-requireAsync 下载下来后目录结构是这样的 -pac ...
- Nginx 灰度实现方式(支持纯灰度,纯生产,50度灰及更多比例配置)
前言 Nginx相关技术短信本篇幅不做详细介绍,所以学习本文之前要对Nginx有相关的了解. 生产环境即线上环境,在经历开发.测试再到上线,不可避免的会更新生产环境,但谁又能保证测试过的代码到线上运行 ...
- Effective C++ 35,36,37
35.使公有继承体现 "是一个" 的含义. 共同拥有继承意味着 "是一个".如 class B:public A. 说明类型B的每个对象都是一个类型A的对象, ...
- Spring Boot 整合 Freemarker,50 多行配置是怎么省略掉的?
Spring Boot2 系列教程接近完工,最近进入修修补补阶段.Freemarker 整合貌似还没和大家聊过,因此今天把这个补充上. 已经完工的 Spring Boot2 教程,大家可以参考这里: ...
- Web调优之IBM JDK+liberty(一): Jmeter pod里压力,50个线程并发测试,调整 -Xms -Xms, Log原来是大问题
1.运行环境 k8s Web服务器: Liberty(IBM J9 JDK),base image : FROM websphere-liberty:20.0.0.3-kernel-java8-ibm ...
- [Effective JavaScript 笔记]第50条:迭代方法优于循环
"懒"程序员才是好程序员.复制和粘贴样板代码,一但代码有错误,或代码功能修改,那么程序在修改的时候,程序员需要找到所有相同功能的代码一处处进行修改.这会使人重复发明轮子,而且在别人 ...
随机推荐
- 每天一个linux命令9之crontab 定时任务
crond 是linux用来定期执行程序的命令.当安装完成操作系统之后,默认便会启动此 任务调度命令.crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作. 1语法 ...
- Uprobes: userspace probes >= Linux 3.5
https://lwn.net/Articles/499190/ https://github.com/andreoli/fulltrace Prominent features in Linux 3 ...
- JAVA实现网页快照,存为图片格式
原文:http://blog.csdn.net/java2000_net/article/details/3643528 截取的google的效果,将就吧,不是特别好. 但是作为普通的应用,我想这个效 ...
- poj 2324 Anniversary party(树形DP)
/*poj 2324 Anniversary party(树形DP) ---用dp[i][1]表示以i为根的子树节点i要去的最大欢乐值,用dp[i][0]表示以i为根节点的子树i不去时的最大欢乐值, ...
- 【Hadoop】Hadoop MR 自定义序列化类
1.基本概念 2.Mapper代码 package com.ares.hadoop.mr.flowsum; import java.io.IOException; import org.apache. ...
- IntelliJ IDEA 快捷键整理-from imooc
IntelliJ IDEA 快捷键整理-from imooc 学习了:https://www.imooc.com/learn/9241, main2, 100.for 3, new Date().so ...
- 最美应用-从Android研发project师的角度之[最美时光]
最美应用-从Android研发project师的角度之最美时光 @author ASCE1885的 Github 简书 微博 CSDN 近期发现最美应用这样一个站点.它会定期推介一些非常有意思的app ...
- 字典树-HDOJ-1247-Hat’s Words
Hat's Words Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- 【Excle数据透视表】如何让字段标题不显示“求和项”
我们做好了数据透视表之后是下面这个样子的 这个样子一点都不好看,那么如何去掉"求和项"呢? 步骤 方法① 单击B3单元格→编辑区域输入"数量 "→Enter(也 ...
- Linux 查看某个程序所在端口的 PID
lsof -i:8085 加入显示的是2001 kill 2001 就可以杀死程序了