数组概念

含义:存储一组相同数据类型元素的集合

定义方式:类型 数组名[长度]

类型:int char bool double等 (所有元素的类型相同)

数组名:变量命名规范

长度:元素个数(正整数)

申明时确定,无法改变;内存中连续,快速访问

注意:C++标准不允许用变量 GCC编译器可以使用变量

数组的使用:通过数组名[下标(index)/索引]定位 ==注意是从0开始==

1
2
int intArray[10];//定义数组,大小为0
//intArray[0]则表示数组中的第一个元素

数组的输入与输出

C++中并不存在用cin或者cout直接输入或输出,可用循环控制挨个处理

1
2
3
4
5
6
for (int i = 0; i < 10; i ++){
cin >> intArray[i];
}
for (int i = 0; i < 10; i ++){
cout << intArray[i] << endl;
}

==C++11特性写法==

范围循环 for (类型 变量名: 数组)

1
2
3
4
for (int &x: intArray){
cin >> x;
} //或直接使用auto

数组的初始化

常规方法

int intArray[10]; 数组中的数不确定

int intArray[10] = {}; 数组里的数初始化为0

int intArray[10] = {1, 2, 3}; 数组前三个数按顺序初始化,其余的数为0

int intArray[] = {1, 2, 3}; 数组按{}内的数字初始化,长度为括号内数字的个数

其他常见方法

algorithm

头文件中的fill函数:接受三个参数 起点 终点 以及值;代表将数组起点和终点的元素都赋值成对应的值

以长度为10为例int intArray[10]

fill(intArray, intArray + 10, 1); 意思是将10个元素赋值为1

fill(intArray + 3, intArray + 8, 2); 将数组中34567赋值为2

string.h

头文件中的memset函数: 接受三个参数 起点 值 内存长度

memset(intArray, 0, 40);

memset(intArray, 0, sizeof(intArray) * 10);

memset(intArray, 0, sizeof(intArray));

memset(intArray + 3, -1, sizeof(int) * 5);

memset中如果值不等于0或者-1,结果会是很奇怪的数字

memset运行速度更快

多维数组

概念:即元素不再单排成一排而是排成多排

定义方法:int grid[4][5];

初始化也可用{}嵌套的方式

1
2
3
4
5
int grid[4][5] = {
{1, 2, 3, 4, 5},
{6,7,8},
{11}
};

访问时也可直接grid[1][2]

也可以用memset(grid, 0, sizeof(grid));进行初始化

如果你想定义三维或者更多维,用更多的[]即可

多维数组的输入与输出(范围循环)

例如定义二维数组int a[n][m];//n行m列

1
2
3
4
5
6
7
8
9
10
11
12
for (auto& line: a){
for(auto& x: line){
cin >> x;
}
}
for (auto& line : a){
for(auto& x: line){
cout << x << " ";
}
cout << endl;
}

多维数组的输出 (普通方法)

1
2
3
4
5
for(int i = 0;i < n;i ++){
for(int j = 0; j < m; j++){
cout << a[i][j];
}
}

补充

memcpy

添加头文件string.h

memcpy复制矩阵memcpy(b, a, sizeof(a));把a的值复制到b上去

内存的复制理解: 把a的内存地址,以b为起点,长度为a所占大小,复制到以b为起点的位置

swap

头文件<algorithm>swap直接交换例如swap(arr[i],arr[j]);

reverse

头文件<algorithm>中reverse进行旋转reverse(arr,arr + n);