【C++】数组,多维数组的使用
文章目录
简介
本文为《C++ Primer》第五版关于数组,多维数组的读书笔记
!!!本文的源码均来自于《C++ Primer》第五版!!!(可能会稍作修改)
The source codes in this article are all from C++ Primer, The Fifth Edition
1. 数组
数组(Array):数组是一块内存中紧靠的空间,使用起来类似容器,但由于是比较底层的内容,所以并不像标准库的容器一样有丰富的功能
1.1. 定义和使用数组
初始化数组:初始化一个数组,值均使用类型默认值,必须指定它的容量大小,并且指定容量必须使用整型常量/常量表达式
int a1[5]; // 正确:直接使用右值创建数组
int normalInt = 5;
const int constInt = 5;
int a2[normalInt]; // 错误:使用了非常量
int a3[constInt]; // 正确:使用了常量
显性初始化数组:在初始化数组时直接定义其中的内容
int a[] = {
0, 1, 2 };
数组无法直接拷贝:数组之间无法直接拷贝,直接给数组赋值另一个数组会报错
- 编译器扩展:少数编译器扩展支持数组拷贝,但仍然建议养成不使用的好习惯,因为那样的源码放到其他编译器会报错
int a[] = {
0, 1, 2 };
int a2[] = a; // 错误:无法拷贝
1.2. 访问数组的元素
下标类型size_t:就像vector使用的size_type一样,数组通常使用size_t来表示下标
int a[] = {
1, 2, 3 };
size_t index = 2;
cout << a[index] << endl; // 输出“3”
循环访问:由于数组没有类似vector的size()来获取数组大小,很多情况下若我们不知道数组大小,循环访问可能会有下标越界(Index Out of Range)的情况,所以最安全的方法是使用范围for循环
int a[] = {
1, 2, 3 };
for (auto ele : a)
{
cout << ele << endl; // 每行输出一个元素
}
1.3. 数组和指针
数组和指针:数组在编译时时长被作为指针(指向首个元素),我们可以用这一特性,利用指针来操作数组
int a[] = {
1, 2, 3 };
// 下面两行代码本质上相同,但一般使用第二种,更简单方便
int *p1 = &a[0] // 指针p1指向数组a中的首个元素
int