数组

一维数组

期末考试结束了,你准备给班级里50同学每人的考试成绩录入程序,那么你要开50个不同名字的变量吗?

为什么提期末考试

通俗地讲,数组就是更加简洁方便地定义和使用一堆变量

具体地,数组的定义方式如下 : a[n+1]

那么,我们已经定义了一个一个名称为a,长度为n的数组

这个数组里存了n个元素,如果我们想使用第1个元素,那么使用a[1],如果我们想使用第2个元素,那么使用a[2],以此类推,a[i]表示使用数组a中第[i]个元素

需要注意一些细节:

1.数组存在第0个元素,也就是说你可以使用a[0]

但你不必须使用a[0] 也就是说,看个人爱好

2.加入你在定义数组时定义了a[N+1],那么你绝对不可以使用a[N+1],你定义的数组大小始终比你可以使用的大小多1

3.养成好习惯,数组要在全局定义

二维数组

期末考试结束了,你的班级要重新排座位

怎么又是期末考试

现在需要你储存所有位置对应的学生编号

显然,你的班级的座位应该排成这样

口 口 口 口 口

口 口 口 口 口

口 口 口 口 口

口 口 口 口 口

口 口 口 口 口

口 口 口 口 口

显然,这时候线性的数组好像不是特别好用了呢

所以我们要用到二维数组,原理跟一位数组差不多

a[N+1][M+1]

同样的,你需要把数组开大一点,你可以使用a[0][j] a[i][0]也可以不使用他们

多维数组

同理,你可以开任意维的数组,但是一维数组是最常用的,二维数组也很常用,三四维数组很少用到,五维及以上...至少我从未遇见

扩展

我们经常使用嵌套的 for 循环来处理二维数组

例:从标准输入中读取两个数n和m,分别表示黑白图片的高与宽对于接下来的n行数据,每行有用空格分隔开的m个数,代表这一位置的亮度值。现在我们读取这张图片,并将其存入二维数组中。

int a[maxn][maxn];
int n, m;

cin >> n >> m;
for (int i = 1; i <= n; i++)
{
	for (int j = 1; j <= m; j++) cin >> a[i][j];
}

字符串string

字符串本质上就是一个存储字符一维数组,它的定义非常简单,你甚至不需要提前预计它的大小,它的定义如下 string s;

字符串的读入也很简单

cin>>s;

或者

cin>>(s+1);

取决于你希望下标从0开始还是下标从1开始

那么好,我怎么知道这个字符串的长度呢?

s.size() 字符串的长度

此外,C++中也封装好了一系列函数供我们使用

string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值

运算符: + <

......

练习题

1

2

3

4

5