最近在学C++,在看C++ Prime(第三版)的过程中把一些零星的知识点记了下来,主要是一些细节问题,便于以后回过头来查阅和巩固。
表达式
1.复数操作
* 可以用一个算术数据类型的值初始化一个复数,但不能用一个复数对象初始化算术数据类型(不支持隐式类型转换)。
* C++支持复数对象的输出,输出包括一个括号,实部和虚部由一个逗号分隔(实部,虚部)
2.sizeof操作符
* sizeof操作符返回一个size_t类型的值,是一个由具体机器相关的typedef定义的,在csddef头文件中定义
3.new/delete操作符
* new/delete操作符可以在运行时刻动态分配内存,类似于C语言中的malloc函数和free函数
* new操作符
-分配一个变量 int *p = new int(10);
-分配一个数组 int *p = new int[numbers];
* delete操作符
-施放一个变量 delete p;
-施放一个数组变量 delete [] p;
4.逗号运算符
* 逗号表达式运算从左向右进行,最后结果为最右边表达式的值。
5.类型转换
a.算术类型转换
* 算术类型转换一般进行截断处理,会出现精度的丢失,不会进行进位处理
b.显式类型转换
* C++的显示类型转换称为强制类型转换(cast),包括static_cast, dynamic_cast,const_cast 和 reinterpret_cast
* 显示类型转换通过 cast-name<type >(expression)格式进行显式类型转化
c.旧式类型转换
* C++类型 type (expression)
* C类型 type (expression)
3.抽象容器类型
1.顺序容器
+ vector
+ list
+ deque
选取顺序容器的一些准则
+ 如果需要随机访问一个容器,vector比list好
+ 如果已知存储的元素个数,vector比list好
+ 如果需要不只是在容器两端插入和删除元素,list更好
+ 除非需要在两端插入和删除元素,否则vector比deque好。
2.vector的增长方式
* 为了提高效率,vector并不是随着每一个元素的插入而增长自己,而是当vector需要增长自己时,它实际分配的空间比当前所需的空间要多一些。
3.定义一个顺序容器
* 每个容器支持一组比较操作符,支持:=, != >, < >=, <=。
* 容器比较是指两个容器的元素之间成对的比较,如果两个容器的所有元素相等,并且长度相同,则两个容器相同。
* 如果两个容器不相等,则容器的大小由不相同的那个元素决定。
4.迭代器
* 迭代器提供了一种一般化的方法,对顺序或关联容器类型的每一个元素进行连续访问。
* 每种容器都提供一个begin() 和 end() 成员函数,返回一个iterator
-begin() 返回一个指向顺序容器开头的元素的iterator
-end() 返回一个指向顺序容器结尾下一个元素的iterator
* iterator可以进行算术运算,但只适合于vector和deque
* 容器对象可以由一对begin() 和 end() iterator指向的一段元素初始化