当前位置:首页 > 内存 > 正文

数组元素在内存中是不连续的

  • 内存
  • 2024-06-01 23:55:08
  • 3832

一、c++中vector元素的地址是不连续的向量中的元素连续存储在内存中。
向量实现由动态数组组成。当空间不足时,使用类似于C语言的realloc函数来重新分配空间。元素的数量是连续存储的,因此支持向量支持在恒定时间内随机访问元素。
二、为什么相邻两个数组不是连续存放的整数数组,元素值可以是0到65535之间的数字,相同的值不会重复出现,0是唯一的,可以重复出现。设计一个算法来确定该数组中的元素是否连续。需要注意以下4点:
(1)87506等值允许乱序。(4)所有零都被认为是连续的,只有一个非零被认为是连续的。
命题分析:
如果不存在0,则在创建连续序列的情况下,最大值和最小值之差必须为n-1。只要是0,最大值和最小值的差值小于n-1,缺失值就可以用0来标记。因此,寻找非零最大值和非零最小值的时间复杂度为O(n)。如果非0非高0最小值+1程序示例代码如下:
#include"stdafx.h"
#include
boolIscontinuous(int*a,intn)
{
if(a==NULL||n<=0)
return;
intmin=a[0],max=a[0];
for(inti=1;i{
if(a[i]!=0)
{
if(min>a[)i])
min=a[i];
if(maxmax=a[i];
}
}
if(max-min>n-1)
false;

return;
}
intmain()
{
intarray[]={8,7,5,0,6};
intlen=sizeof(array)/sizeof(array[0]);
if(Is连续(array,len))else
printf


三、二维数组的内存存放问题是连续的。
C和C++在内存方面都只有一维数组。也就是说,只要声明一个数组,这个数组的所有元素都会在内存中顺序存储。
所谓多维矩阵只是一个逻辑概念或者处理数据的组织形式。
例如,数组Intarr[3][3][3]对于编译器来说是一个容量为3*3*3的一维数组。
之所以分为三个维度,是为了将这27个数据进行分组,方便我们使用。
注意,定义数组时,维度中的值反映了组织形式,我们使用时,维度必须反映数据的位置,例如arr[2][1][0]。每个维度的值只能取0-2来表示位置。