• 静态数组
    int arr[10] 这段代码到底做了什么事情呢?主要有这么几件事:

1、在内存中开辟了一段连续的内存空间,大小是 10 * sizeof(int) 字节。一个 int 在计算机内存中占 4 字节,也就是总共 40 字节。

2、定义了一个名为 arr 的数组指针,指向这段内存空间的首地址。

那么 arr[1] = 2 这段代码又做了什么事情呢?主要有这么几件事:

1、计算 arr 的首地址加上 1 * sizeof(int) 字节(4 字节)的偏移量,找到了内存空间中的第二个元素的首地址。

2、从这个地址开始的 4 个字节的内存空间中写入了整数 2。

增删查改

  • 动态数组
    动态数组底层还是静态数组,只是自动帮我们进行数组空间的扩缩容,并把增删查改操作进行了封装,让我们使用起来更方便而已。

    // 创建动态数组
    // 不用显式指定数组大小,它会根据实际存储的元素数量自动扩缩容
    vector arr;

    for (int i = 0; i < 10; i++) {
    // 在末尾追加元素,时间复杂度 O(1)
    arr.push_back(i);
    }

    // 在中间插入元素,时间复杂度 O(N)
    // 在索引 2 的位置插入元素 666
    arr.insert(arr.begin() + 2, 666);

    // 在头部插入元素,时间复杂度 O(N)
    arr.insert(arr.begin(), -1);

    // 删除末尾元素,时间复杂度 O(1)
    arr.pop_back();

    // 删除中间元素,时间复杂度 O(N)
    // 删除索引 2 的元素
    arr.erase(arr.begin() + 2);

    // 根据索引查询元素,时间复杂度 O(1)
    int a = arr[0];

    // 根据索引修改元素,时间复杂度 O(1)
    arr[0] = 100;

    // 根据元素值查找索引,时间复杂度 O(N)
    int index = find(arr.begin(), arr.end(), 666) - arr.begin();