《C++ Primer(第5版)》学习笔记:第3章 字符串、向量和数组

类型与硬件:基本数据类型(比如数字、字符)体现了大多数计算机硬件本身具备的能力。标准库定义了另外一组具有更高级性质的类型,它们并未直接实现到计算机硬件中。

命名空间的using声明:头文件不应包含using声明。这是因为头文件的内容会拷贝到所有引用了它的文件中去,如果头文件包含了using声明,那么每个使用了该头文件的文件都会有这个声明。

直接初始化和拷贝初始化:使用等号初始化一个变量完成的是拷贝初始化,使用圆括号或者花括号则完成的是直接初始化。

字面值和string对象相加:当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是string。由于历史原因,也为了与C兼容,切记字符串字面值与string是不同的类型。

编程建议:使用C++版本的C标准库头文件。特别地,在名为cname的头文件中定义的名字从属与命名空间std,而定义在名为.h的头文件中的则不然。

vector对象能高效增长:C++标准要求vector应该能在运行时高效快速地添加元素,因此没有必要在定义vector对象时设定其大小,事实上通常的情况是恰恰相反,这么做的性能可能更差。只有一种例外:vector所有元素值都一样。

向vector对象添加元素蕴含的编程假定:其一是如果循环体内部包含有向vector对象添加元素的语句,则不能使用范围for循环。

vector/string对象的下标运算符:可用于访问已存在的元素,不能用于添加元素(与python不同)。

迭代器:但凡使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。

指针和数组:在很多用到数组名字的地方,编译器都会自动地将其替换为一个指向数组首元素的指针。

ptrdiff_t类型:两个指针相减的结果的类型,是标准库类型。差值可能为负,因此是一种带符号类型。

内置的下标运算:所用的索引值不是无符号类型,这一点与vector和string不一样。如:int a[] = {0,1,2,3}; int *p = &a[2]; int k = p[-2];p[-2]是a[0]表示的那个元素。

使用范围for循环处理多维数组:要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值