C++ 数组
                           
天天向上
发布: 2025-03-29 15:04:26

原创
989 人浏览过

在 C++ 中,数组(Array) 是一种用于存储 相同数据类型固定大小 数据结构。数组在 性能优化批量数据处理 方面非常重要。本文将全面解析 C++ 数组的 定义、初始化、遍历、多维数组、指针与数组的关系、常见操作 以及 STL(标准库)中的 std::arraystd::vector 等内容。


1. C++ 数组的定义和声明

1.1 一维数组的声明

语法格式:

数据类型 数组名[数组大小];

示例:

int arr[5]; // 声明一个包含5个元素的整型数组

⚠️ 数组的大小必须是编译时确定的常量(C++标准数组)。C++ 11 之后可以使用 std::vector 来支持动态数组。


2. 数组初始化方式

2.1 直接初始化

int arr[5] = {1, 2, 3, 4, 5}; // 直接赋值

2.2 部分初始化(未赋值元素自动初始化为 0)

int arr[5] = {1, 2}; // 剩下的元素默认为 0

输出: 1 2 0 0 0

2.3 省略大小(自动推导)

int arr[] = {10, 20, 30}; // 自动推导数组大小为 3

2.4 默认初始化(无初始化时,数组的值是未定义的)

int arr[5]; // 数组中的值是垃圾值

3. 访问和遍历数组

3.1 使用 for 循环遍历

#include <iostream>
using namespace std;

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    for (int i = 0; i < 5; i++) {
        cout << arr[i] << " ";
    }
    return 0;
}

输出: 1 2 3 4 5

3.2 使用 range-based for(C++11 及以上)

for (int num : arr) {
    cout << num << " ";
}

优点: 代码简洁,适用于 只读 访问。

3.3 使用指针遍历数组

for (int* ptr = arr; ptr < arr + 5; ptr++) {
    cout << *ptr << " ";
}

优点: 适用于指针操作、动态数组。


4. 多维数组

4.1 二维数组的声明

int matrix[3][3]; // 声明 3x3 矩阵

4.2 二维数组的初始化

int matrix[2][3] = {
    {1, 2, 3},
    {4, 5, 6}
};

4.3 二维数组遍历

for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 3; j++) {
        cout << matrix[i][j] << " ";
    }
    cout << endl;
}

5. 数组与指针的关系

5.1 数组名即指针

数组的名称 arr 本质上是 指向首元素的指针

int arr[5] = {1, 2, 3, 4, 5};
cout << arr;   // 输出数组的首地址
cout << *arr;  // 输出第一个元素,即 1

5.2 指针访问数组

int* p = arr;
cout << *(p + 1); // 等同于 arr[1]

5.3 数组传递给函数

数组作为函数参数时,本质上传递的是 指针

void printArray(int* arr, int size) {
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
}

int main() {
    int nums[] = {10, 20, 30, 40};
    printArray(nums, 4);
}

注意: 不能在函数内用 sizeof(arr) 获取数组大小,因为 arr 退化成了指针。


6. 动态数组(new & delete

C++ 标准数组大小固定,如果想要动态分配数组,需要使用 newdelete

int* arr = new int[10]; // 动态分配 10 个整数
delete[] arr; // 释放内存

缺点: 需要手动释放,建议使用 std::vector


7. STL 数组(std::arraystd::vector

7.1 std::array(C++11)

#include <array>
array<int, 5> arr = {1, 2, 3, 4, 5};
cout << arr[2]; // 访问元素

优点: std::array 具备普通数组的性能,同时支持 size()at() 等成员函数。

7.2 std::vector(可变长数组)

#include <vector>
vector<int> vec = {1, 2, 3};
vec.push_back(4); // 增加元素
vec.pop_back();   // 删除元素

优点: 动态扩展,使用方便。


8. 常见错误与注意事项

问题说明
访问数组越界C++ 不检查数组越界,会导致未定义行为
传递数组时 sizeof(arr) 失效因为数组会退化为指针,无法获取真实大小
new[] 申请的数组没有 delete[]导致内存泄漏
std::vector 替代普通数组推荐使用 std::vector 以避免数组大小限制

9. 参考链接


10. 总结

  • 数组是存储相同类型元素的容器,大小固定。
  • 一维数组、二维数组的初始化、遍历方式不同
  • 数组名即指针,可与指针操作结合
  • 动态数组用 newdelete,推荐使用 std::vector
  • std::arraystd::vector 适用于现代 C++ 开发

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *