数组
固定长度,如果要改变数组的长度,只能创建一个更大的数组,然后将老数组的数据复制过去。所以,现代的C++程序更多地使用 vector 来取代数组。
数组的定义和初始化
数组的维数只能通过常量表达式来定义,只能包含:整型字面常量、枚举常量、用常量表达式初始化的整形 const 对象,非 const 变量以及要到运行阶段才知道其值的 const 变量 都 不能 定义数组的维数。由于数组里面的元素都是对象,所以也不存在引用的数组。例如以下这种是不能定义数组的。
1 | int size = 6; |
注:在函数体外面定义的内置数组,如果没有显式的提供初值,则其中所有元素会被初始化为0;在函数体内部定义的内置数组不会被初始化。
注2:不能用 auto 关键字来推断数组的数据类型
注3:不能将数组的内容拷贝给其他数组,也不能用数组为其他数组赋值,错例如下
1 | int a[] = {0, 1, 2}; |
字符数组的两种初始化形式和他们的区别
1 | char char_array[] = {'C', '+', '+'}; //只有3个元素 |
数组操作
数组里面下标的类型是 size_t,这是在
标准库函数 begin 和 end
为了减少指针使用的困难,
1 | int ia[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; |
指针和多维数组
1 | int ia[3][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}}; |
第二行采用从内向外的方式理解:(*p) 代表这是一个指针,[4] 表示这个指针指向的是一个有 4 个元素的数组,int 说的是这个数组是整型。
使用标准库 begin 和 end 的版本如下
1 | for(auto p = begin(ia); p != end(ia); ++p) |