《代码随想录》的数组学习

文章探讨了C++中数组和vector的区别,强调vector作为容器而非简单的数组,其内存地址连续但可能会因元素增删导致内部重排。同时对比了数组和链表的优缺点,指出数组在内存使用效率上的优势。还提及了string类型的内部存储机制以及多维数组的内存连续性问题。动态和静态分配在处理大型数据时的影响也被讨论。
摘要由CSDN通过智能技术生成

本文是计划花一些时间学习《代码随想录》时做一个记录,水平有限,可能理解有误,内容摘抄总结自Carl大佬的 链接: 数组 感谢大佬开源的面向算法初学者的好资料

数组理论基础

大家如果使用C++的话,要注意vector 和 array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组。
实际操作的时候,vector容器的内存地址与array相似也是连续的,每个元素4个地址

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> vec1 = vector<int>(10);
    int arr1[10];
    cout << &arr1[0] << " " << &arr1[1] << " " << &arr1[2] << endl;
    cout << &vec1[0] << " " << &vec1[1] << " " << &vec1[2] << endl;
    system("pause");
    return 0;
}

运行结果
数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。与链表相对比,链表的内存空间地址不是连续的,但是我们在删除的时候更简单,复杂度为o1,然而随机访问的困难就会变大。
在使用string类型时,24B内部留有16B的存储空间用来存储数据,当数据过长的时候,用16B在堆中寻址,将内容存在堆中,以保持string类型等长

数组空间连续

连续的内存空间使得内存中的碎片减少,增加内存使用率
对于一维数组来说,无论多长,动态分配或者静态分配,在存储空间上一定是连续的,数据过长无法在内存上找到连续的空间,就会报错。
对于多维数组来说,都用new生成,同一个new底下的空间是连续的,如果静态定义多维数组,那么整个都是连续的(对于vector<vector<>>来说也是一样的,同样不连续)
如果想要申请连续的,(1)可以利用辅助变量控制每行的位置,申请一维数组。(2)可以先申请,然后再改变数组头的地址,(编码比较繁琐,且担心会冲掉旧数据)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值