• 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] 不属于这个数组的空间,使用会下标越界,程序可能出错。

(二)初始化

  1. 完全初始化:定义时给所有元素赋值。
    示例:int a[5] = {0, 1, 2, 3, 4}; ,这样 a[0]=0a[1]=1 ……a[4]=4
  2. 部分初始化:只给前面部分元素赋值,剩余元素默认用对应数据类型的默认值(整型默认 0 )。
    示例:int a[5] = {4, 5}; ,则 a[0]=4a[1]=5a[2]a[3]a[4] 都是 0
  3. 不初始化:定义时不赋值,元素值不确定(是内存里原来的随机值 )。
    示例:int a[5]; ,直接用这数组的话,元素值不可预测,实际开发一般少这么用,避免出错。
  4. 错误写法:不能用 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 ,最后遍历输出。

(二)统计与指定数字相同的数的个数(对应题目:与指定数字相同的数的个数 )

题目要求:输入整数序列长度 NN 个整数、指定数字 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); ,保证排序范围正确。

五、总结

  1. 数组定义:确定数据类型、数组名和长度,注意下标从 0 开始,避免越界。
  2. 初始化:可完全、部分初始化,也能不初始化(但不初始化元素值不确定,慎用 )。
  3. 输入输出:用循环操作,下标可根据习惯选 0 或 1 开头,但要和数组操作逻辑对应。
  4. 常见操作:通过循环和库函数(如 sort )实现数据处理、统计、排序等功能,实际开发根据需求灵活运用数组管理同类型数据,让代码更简洁高效。

多练习这些示例,理解数组的使用场景和操作方法,就能更好地用数组解决 C++ 编程里的问题啦,比如处理一组数据的计算、统计、排序等需求 。

0 条评论

目前还没有评论...