- C++
C++ 一维数组知识学习笔记
- 2025-7-17 9:25:24 @
C++ 数组知识学习笔记
一、数组的基本概念
数组是相同数据类型的元素按一定顺序排列的集合,把多个类型相同的变量用同一个名字命名,用编号(下标)区分。比如要存储 5 个学生的成绩,就可以用数组,方便管理和操作。
- 数组名:给这组相同类型变量起的统一名字,像
int arr[5];
里的arr
。 - 下标:区分数组中不同元素的编号,从
0
开始。比如arr[0]
是数组arr
的第一个元素,arr[4]
是第五个元素(因为下标从 0 开始,5 个元素下标是 0 - 4 )。 - 元素:数组里存储的具体数据,比如
arr[0] = 100;
里的100
就是数组arr
的一个元素。
二、一维数组的定义与初始化
(一)定义
格式:数据类型 数组名[数组长度];
示例:int a[5];
定义了一个名为 a
的整型数组,能存 5 个整数,元素是 a[0]
、a[1]
、a[2]
、a[3]
、a[4]
。注意 a[5]
不属于这个数组的空间,使用会下标越界,程序可能出错。
(二)初始化
- 完全初始化:定义时给所有元素赋值。
示例:int a[5] = {0, 1, 2, 3, 4};
,这样a[0]=0
、a[1]=1
……a[4]=4
。 - 部分初始化:只给前面部分元素赋值,剩余元素默认用对应数据类型的默认值(整型默认
0
)。
示例:int a[5] = {4, 5};
,则a[0]=4
、a[1]=5
,a[2]
、a[3]
、a[4]
都是0
。 - 不初始化:定义时不赋值,元素值不确定(是内存里原来的随机值 )。
示例:int a[5];
,直接用这数组的话,元素值不可预测,实际开发一般少这么用,避免出错。 - 错误写法:不能用
a[5] = {0,1,2};
,因为a[5]
只是一个元素,不是整个数组,这样写会报错。
代码示例(结合初始化):
#include<iostream>
using namespace std;
int main() {
// 完全初始化,每个元素依次赋值
int a[5] = {1, 2, 3, 4, 5};
for(int i = 0; i < 5; i++) {
cout << a[i] << " ";
}
cout << endl;
// 部分初始化,剩余元素默认 0
int b[5] = {4,5};
for(int i = 0; i < 5; i++) {
cout << b[i] << " ";
}
cout << endl;
// 不初始化,元素值不确定(实际运行可能是随机值)
int c[5];
// 这里只是演示,实际用的话建议先初始化再用
for(int i = 0; i < 5; i++) {
cout << c[i] << " ";
}
cout << endl;
return 0;
}
三、数组的输入与输出
(一)输入
通常用循环,逐个给数组元素赋值。可以让下标从 1
开始(符合生活习惯,不过要注意数组实际下标规则 ),也可从 0
开始。
示例(下标从 1 开始输入):
#include<iostream>
using namespace std;
int main() {
int arr[200];// 定义能存 200 个整数的数组
int n;
cout << "请输入数组的大小:";
cin >> n;// 输入要存的元素个数
// 下标从 1 开始,循环 n 次输入
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
return 0;
}
(二)输出
同样用循环,把数组元素逐个打印。
示例(输出每个元素的两倍,下标从 1 开始):
#include<iostream>
using namespace std;
int main() {
int arr[200];// 定义数组
int n;
cout << "请输入数组的大小:";
cin >> n;// 输入元素个数
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
// 输出每个元素的两倍,下标从 1 到 n
for (int i = 1; i <= n; i++) {
cout << arr[i] * 2 << " ";
}
return 0;
}
四、数组的常见操作示例
(一)把数组每个数扩大两倍(对应题目:把每个数扩大两倍 )
题目要求:输入 n
个整数,都乘以 2 再输出,最多 200 个数。
代码实现:
#include <iostream>
// 定义数组,最多存 300 个整数(满足题目最多 200 个的需求,可适当大些)
int arr[300];
using namespace std;
int main() {
int n;// 存储输入的整数个数
cin >> n;
// 循环输入 n 个整数,同时乘以 2
for (int i = 0; i < n; i++) {
cin >> arr[i];
arr[i] *= 2;
}
// 循环输出乘以 2 后的结果
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
解释:先定义数组存输入的数,输入时直接把每个数乘 2 ,最后遍历输出。
(二)统计与指定数字相同的数的个数(对应题目:与指定数字相同的数的个数 )
题目要求:输入整数序列长度 N
、N
个整数、指定数字 m
,输出序列中与 m
相同的数的个数。
代码实现:
#include <iostream>
// 定义数组,最多存 300 个整数(满足题目 N≤100 的需求 )
int arr[300];
using namespace std;
int main() {
int n;// 存储整数序列长度
cin >> n;
// 循环输入 n 个整数到数组
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
int m; // 存储指定数字
cin >> m;
int count = 0; // 计数器,统计相同数的个数
// 循环遍历数组,找与 m 相同的数
for (int i = 1; i <= n; i++) {
if (arr[i] == m) {
count++;
}
}
cout << count; // 输出个数
return 0;
}
解释:先输入数组元素,再输入指定数字,遍历数组统计相同元素个数,最后输出。
(三)平移数据(对应题目:平移数据 )
题目要求:将数组第一个元素移到末尾,其余数据依次往前平移一个位置。
代码实现:
#include <iostream>
// 定义数组,最多存 3000 个整数(可根据需求调整 )
int arr[3000];
using namespace std;
int main() {
int n; // 存储数组元素个数
cin >> n;
// 循环输入 n 个整数到数组,下标从 1 开始
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
// 备份第一个元素
int bf = arr[1];
// 从第二个元素开始往前平移
for (int i = 2; i <= n; i++) {
// 当前元素赋值给前一个位置,实现平移
arr[i - 1] = arr[i];
}
// 把备份的第一个元素放到数组末尾
arr[n] = bf;
// 循环输出平移后的数组元素
for (int i = 1; i <= n; i++) {
cout << arr[i] << " ";
}
return 0;
}
解释:先备份第一个元素,然后通过循环让后面元素依次往前挪,最后把备份的元素放末尾,完成平移后输出。
(四)简单排序(对应题目:简单排序 )
题目要求:输入 n
个 1~2000 范围内的整数,从小到大排序后输出。
代码实现(利用 algorithm
库的 sort
函数 ):
#include <iostream>
// 引入算法库,用 sort 函数排序
#include <algorithm>
// 定义数组,最多存 3000 个整数
int arr[3000];
using namespace std;
int main() {
int n;// 存储输入的整数个数
cin >> n;
// 循环输入 n 个整数到数组,下标从 0 开始(sort 函数习惯从 0 开始处理 )
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
// sort 函数对数组前 n 个元素升序排序,arr 是起始地址,arr + n 是结束位置(不包含 )
sort(arr, arr + n);
// 循环输出排序后的数组元素
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
解释:先输入数组元素,借助 sort
函数快速排序(升序),再遍历输出排序后的结果。sort
函数需要引入 algorithm
库,它默认对数组指定范围进行升序排序,参数是起始地址和结束地址(结束地址对应的元素不参与排序 )。如果数组下标从 1 开始,排序时要调整参数为 sort(arr + 1, arr + n + 1);
,保证排序范围正确。
五、总结
- 数组定义:确定数据类型、数组名和长度,注意下标从 0 开始,避免越界。
- 初始化:可完全、部分初始化,也能不初始化(但不初始化元素值不确定,慎用 )。
- 输入输出:用循环操作,下标可根据习惯选 0 或 1 开头,但要和数组操作逻辑对应。
- 常见操作:通过循环和库函数(如
sort
)实现数据处理、统计、排序等功能,实际开发根据需求灵活运用数组管理同类型数据,让代码更简洁高效。
多练习这些示例,理解数组的使用场景和操作方法,就能更好地用数组解决 C++ 编程里的问题啦,比如处理一组数据的计算、统计、排序等需求 。