现代C++程序应尽量使用vector和迭代器类型,而避免使用低级的数组和指针。设计良好的程序只有在强调速度时才在类实现的内部使用数组和指针。
1、数组的缺陷:
Ø 数组的长度是固定的
Ø 程序员无法知道一个给定数组的长度
Ø 没有提供size操作返回大小,也没有提供push_back操作添加元素
Ø 如果要更改数组长度,我们不得不先建立一个更大的数组,再将原来的数组元素拷贝进去
Ø 容易出错,难以调试
总之数组很烂,而我们还要学习数组的原因,是依赖于数组的程序还大量存在。
2、数组的定义
数组的维数必须用在编译时就能确定的值,例如整形字面值常量、枚举常量或者用常量表达式初始化的整形const对象。非const变量以及要到运行时才能知道其值的const变量都不能用于数组的维数。
3、数组的初始化
int ia[] = {0,1,2};//直接给出初始化列表
int ia[3];//没有初始化
初始化相关:
初始化情况
|
说明
|
函数体外定义的数组
|
元素初始化为0
|
函数体内定义的内置数组
|
不提供初始化
|
函数体内或者外面的自定义类型
|
自动调用默认构造函数初始化
|
4、字符数组的初始化
char ca1[] = {‘a’,’b’,’+’};//给出初始化列表
char ca2[] = {‘a’,’b’,’+’,’\0’}//初始化末尾有个空字符’\0’,因此该字符数组是字符串char ca3[] = “ab+”//用字符串字面量初始化字符数组,末尾将自动填’\0’
char ca3[3] = “ab+”//错误,因为字符串字面量带有’\0’,现在却放不下
5、数组的操作
数组下标的正确类型是size_t,遍历时应生命为该类型
数组相关操作,要仔细检查下标是否越界