C++ Primer 第三版 读书笔记
1.如果一个变量是在全局定义的,系统会保证给它提供初始化值0。如果变量是局部定义的,或是通过new表达式动态分配的,则系统不会向它提供初始值0
2.一般定义指针最好写成:" string *p; " 而不是 " string* p; "
3.试图将一个非const对象的指针指向一个常量对象的动作将引起编译错误
4.引用类型主要作用于函数的形式参数 P/89
5.枚举成员的值不必唯一
6.一个数组不能被另外一个数组初始化,也不能被赋值给另一个数组。而且,C++不允许声明一个引用数组(即由引用组成的数组) P/95
7.volatile修饰符的主要目的是提示编译器,该对象的值可能在编译器未检测到的情况下被改变,因此编译器不能对引用这些对象的代码作优化处理。
8.逗号表达式的结果是最右边表达式的值(从左向右) P/135
9.关于位操作符的详细介绍和使用方法参见P/136,讲得很透彻
10.容器
10.1关联容器
10.1.1 map P/247
"键/值"对:键用来索引map,而值用来存储数据。
插入单个元素最好用insert(不使用下标方式) P/248 - P/249
10.1.2 set P/256
10.1.3 比较 P/247
如果只想知道一个值是否存在时,用set最有用,希望存储(也可能修改)一个相关的值时,map最有用
10.2 顺序容器
10.2.1 list
非连续内存区域,允许双向遍历,插入、删除效率高,对随机访问支持不好,需要遍历,且每个元素有两个指针的额外空间开销。
10.2.2 vector
表示一段连续的内存区域,每个元素被顺序存储在这段内中。随机访问效率很高,但是插入、删除效率低(除非是最后一个元素),右边的元素都要重新拷贝一次。(deque也是一端连续内存,但是支持高效的在首部插入和删除元素。它通过两级数组结构来实现。)
vector自增长方式:分配两倍于当前容器的存储区,把当前的值拷贝到新分配的内存中,并释放原来的内存。
10.2.3 list与vector比较 (vector还是list? P/213)
11.调用函数比直接计算条件操作符要慢得多——inline机制用来优化小的、只有几行的、经常被调用的函数 P/303
12.头文件不应该含有非inline函数或对象的定义
13.在函数中频繁使用的自动变量可使用register声明为寄存器自动对象。出现在循环语句中的数组索引和指针是寄存器对象的很好例子:
for( register int ix = 0; ix < sz; ++ix )
如果所选择的变量被频繁使用,则寄存器变量可以提高函数的执行速度。
注意:关键字register对编译器来说只是一个建议,有些编译器可能忽略该建议,而是使用寄存器分配算法找出最合适的候选放到机器可用的寄存器中。 P/337
14.如果操作数被设置为0,则C++会保证delete表达式不会调用操作符delete(),没有必要测试是否为0。 P/340
if( pi != 0 ) //没必要写这行
delete pi;
15.delete pi 之后,pi成为空悬指针,建议设置指针为0 P/340
16.自动指针auto_ptr 见P/341
17.C++支持从C语言继承而来支持显式初始化表的机制,类似于用在初始化数组:
Data local1 = { 0, 0 };
//相当于local1.ival = 0; local1.ptr = 0;
根据数据成员被声明的顺序,这些值按位置被解析。 P/566
18.explict关键字用于关闭编译器隐式转换
19.每个return语句之间,内联析构函数都必须被展开(编译时),所以建议函数内尽量少return,可用其它变量代替的就代替。
20.int a = b + c ; //是对a的初始化
int a;
a = b + c ; //赋值操作,前面比后面高效
21."::"、".*"、"."、"?:"四个操作符不能被重载
22.typeid用于获取对象/变量的实际类型,用法:typeid(type).name()
23.函数介绍
sizeof 作用是返回一个对象或类型名的字节长度。 P/132
isalpha 判断是不是一个英文字母
#include <cstring>
int strlen( const char* ) //返回字符串的长度
int strcmp( const char*, const char* ) //比较两个字符串是否相等
char* strcpy( char*, const char* ) //把第二个字符串拷贝到第一个字符串中
#include <assert.h>
assert 通用预处理宏(断言 P/12)
#include <algorithm> //包括各种数据结构的元素检索、替换、逆序等等通用的算法。sort/find/max
#include <iomanip>
setw() //功能与scanf类似,它读入的字符数最多为传递给它的参数减1 P/112
本文转自博客园农民伯伯的博客,原文链接:C++ Primer 第三版 读书笔记,如需转载请自行联系原博主。
C++ Primer 第三版 读书笔记相关推荐
- Linux设备驱动程序 第三版 读书笔记(一)
Linux设备驱动程序 第三版 读书笔记(一) Bob Zhang 2017.08.25 编写基本的Hello World模块 #include <linux/init.h> #inclu ...
- 高性能mysql第三版读书笔记
第1章 MySQL 架构与历史 MySQL最重要.最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理(Query Processing)以及其他系统任务(Server Task)和数据的存储 ...
- 汇编语言(王爽)第三版-读书笔记
文章目录 Central Processing Unit 中央处理单元 简称CPU 汇编语言的组成 Cpu对存储器的读写 CPU与其他存储芯片的导线-总线 存储器 内存地址空间 书中11页 作者对其作 ...
- MySQL高性能数据_第三版(读书笔记)
1. 如何保证在系统崩溃时,事务处理的数据一致性?(事务日志) 概念:事务日志可以帮助提升事务的效率. 使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把该修改行为记录到持久在硬盘上的事 ...
- Effective Java 第三版读书笔记(类和接口)
第15条.使类和成员的可访问性最小化 对于成员有四种可访问级别: 1.私有的(private)----- 只有在声明该成员的顶层类内部才可以访问这个成员. 2.包级私有的(package-privat ...
- 《Python核心编程》第三版 读书笔记
"一个不成熟男子的标志是为了某种事业英勇地死去,一个成熟男子的标志是为了某种事业卑微地活着." ...
- C++Primer第5版学习笔记(三)
C++Primer第5版学习笔记(三) 第四/五章的重难点内容 你可以点击这里回顾第三章内容 因为第五章的内容比较少,因此和第四章的笔记内容合并. 第四章是和表达式有关的知识, ...
- Think in Java第四版 读书笔记9第15章 泛型
Think in Java第四版 读书笔记9第15章 泛型 泛型:适用于很多很多的类型 与其他语言相比 Java的泛型可能有许多局限 但是它还是有很多优点的. 本章介绍java泛型的局限和优势以及ja ...
- C++Primer第5版学习笔记(一)
C++Primer第5版学习笔记(一) 第一.二章的重难点内容 这个笔记本主要记录了我在学习C++Primer(第5版,中文版)的过程中遇到的重难点及其分析.因为第一.二章都比较简单,因 ...
最新文章
- WPF 第一个创建的窗体会作为Application.Current.MainWindow
- IOS 程序内调用本地打电话功能-make a phone call
- UA MATH571B 试验设计III 单因素试验设计1
- 简单的Session案例 —— 一次性验证码
- 6.824 RPC lesson2 2020(二)
- 【读书笔记】计算机是怎样跑起来的
- FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS
- 前端基础-html-列表
- ProtoBuf3语法指南(Protocol Buffers)_上
- python类和对象的定义_day15_python_类和对象
- MySQL数据库的多种连接方式及工具
- openwrt路由器samba拒绝访问
- Android开发十年,面试百度竟被刷!柳暗花明2020获字节跳动Offer(面试总结)
- 苹果发信用卡,其它硅谷巨头如何发力金融科技?
- Android6.0以下系统判断相机权限
- 【CSDN 2021 年度总结】半年涨粉11万,铁杵磨成针
- Linux下nginx与Tomcat的https非443端口配置
- MySql随笔-常见的数据库对象
- 【数据结构】-关于带头双向循环链表的增删查改
- 湖北省水系数据,水库数据,线要素和面要素
热门文章
- tensorflow keras 上采样(放大图片) tf.keras.layers.UpSampling2D 示例
- IEDA与activiti不兼容等等安装错误问题的解决方案
- 【建站系列教程】1、前言
- 视频检测分割--Deep Feature Flow for Video Recognition
- 深度抠图--Deep Image Matting
- LLVM报错解决:/usr/bin/ld: cannot find -lz和/usr/bin/ld: cannot find -lncurses
- java贪心算法 区间调度_贪心算法-区间调度问题解之证明(示例代码)
- java随机产生100个大小写字母_Java生成固定长度的随机字符串(以大小写字母和数字)...
- matlab中的histc,Matlab histc与矢量箱
- Docker(五):Docker Volume