一、数组和容器
数组和指针要比容器和迭代器低级,现代c++程序应尽量使用vector和iterator,而避免使用低级的数组和指针。好的程序只有在强调速度时采用数组和指针。数组被严格限制在程序内部使用,只有当性能测试表明容器无法达到必要的速度要求时,才使用数组。
A、数组
1、数组定义
数组维数必须用常量表达式定义,非const变量和直到运行阶段才知道大小的const变量都不能用作数组维数。
2、数组初始化
在函数体外定义的内置数组,其元素均初始化为0;在函数体内,则元素无初始化。对于非内置数组,即类数组,自动调用默认的构造函数进行初始化,如果没有默认的构造函数,则必须显示初始化。
如果指定了数组维数,那么初始化列表的元素个数不能超过数组维数。当列表数据较少时,剩下的元素,若是内置数组,则初始化为0,否则用构造函数初始化。
3、数组下标
从0开始,,数组长度类型是size_t类型
注意:
c++标准功能里面,数组是不能直接赋值和复制的,即不能用一个数组初始化另一个数组,也不能将一个数组赋值给另一个数组。尽管有的编译器是可以进行数组赋值的,但是这依赖于编译器,最好不要使用。
B、容器和数组的区别
数组与容器相比有着如下缺点:数组长度固定,容器长度可以动态增加,而且数组不提供获取其容量大小的size操作,也不提供push_back操作,因此程序员无法动态的获取数组的长度,如果要改变长度,也只能创建一个新的数组,并且内置数组的使用更加容易出错且难以调试。
二、指针和迭代器
1、指针定义
string* ps1,ps2;//仅ps1是指针,ps2是一个string类型的数据
string* ps1, *ps2;//都是指针
string *ps1,*ps2;
因此定义指针时,*的位置不重要,必须一个数据与一个*紧邻
2、指针初始化
指针可以用来保存特定对象的地址,指向某个对象后面的另一个对象,或者0,代表不指向任何对象。
3、指针和引用区别
引用前必须进行初始化;给引用赋值修改的是该引用所关联的对象的值,而指针只是修改的一种关系。
4、指针是一个左结合的操作符