动态创建数组

本文详细介绍了如何使用 C/C++ 的 malloc 和 new 运算符来动态分配一维和二维数组的内存。通过具体实例展示了不同情况下内存分配的方法,并提供了代码示例以便读者更好地理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般的可以用malloc或new   :  
  一维数组  
                            int   arr1[100];  
  可以这样实现  
                            int   n   =   100;  
                            int   *arr1   =   (int*)malloc(sizeof(int)   *   n);  
  二维数组  
                            int   arr2[50][100]  
  可以这样实现  
                            int   m   =   50;  
          int   (*arr2)[100]   =   (int   (*)[100])malloc(sizeof(int[100])*m);  
  或者                            
          typedef   int   INT_ARR[100];  
                            int   m   =   50;  
          INT_ARR   *arr2   =   (INT_ARR   *)malloc(sizeof(INT_ARR)*m);  
   
  使用跟真正的数组一样,如  
   
  for(int   i=0;i<10;i++)  
  for(int   j=0;j<100;j++)  
  arr2[i][j]   =   i*100   +   j;   
   

 

1D:  
  int   *arr;//可以是其他类型  
  arr=new   int[n];  
  2D:  
  int   **arr;    
  int   N,M;    
  cin   >>   N   >>   M;    
   
  arr   =   new   int*[N];    
  for(int   i=0;i<N;i++)   {   arr[i]   =   new   int[M];   }  

在 MATLAB 中动态创建数组是一种常见的操作,尤其适用于数据处理、迭代计算或实时数据采集等场景。动态创建数组通常指的是在运行时逐步扩展数组的大小,而不是预先分配固定的内存空间。 以下是一些常用的动态创建数组的方法: ### 1. 使用空数组初始化并逐个添加元素 MATLAB 支持通过空数组 `[]` 初始化一个数组,并在后续操作中动态扩展其大小。这种方法适用于不确定最终数据规模的情况。 ```matlab A = []; % 初始化空数组 for i = 1:5 A(i) = i^2; % 动态添加元素 end disp(A) ``` 该方法虽然简单易用,但频繁地改变数组大小会导致性能下降,因为每次扩展都需要重新分配内存[^1]。 ### 2. 预分配数组大小以提高效率 如果已知数组的最终大小,建议使用预分配方式来提升性能。这可以通过函数如 `zeros`、`ones` 等实现。 ```matlab n = 5; B = zeros(1, n); % 预分配数组 for i = 1:n B(i) = i^2; end disp(B) ``` 这种方式避免了反复分配内存,因此在处理大规模数据时更高效。 ### 3. 使用元胞数组存储异构数据 当需要动态存储不同类型的数据(例如字符串、矩阵、标量混合)时,可以使用元胞数组 `cell`。 ```matlab C = {}; % 初始化空元胞数组 C{1} = '文本'; C{2} = rand(2, 2); C{3} = 42; disp(C) ``` 元胞数组允许每个元素具有不同的类型和大小,非常适合灵活的数据组织需求[^2]。 ### 4. 动态扩展元胞数组 与普通数组类似,元胞数组也可以在循环中动态扩展。 ```matlab D = {}; for i = 1:3 D{i} = i * (1:i); % 每次添加一个向量 end disp(D) ``` ### 5. 使用 `cat` 函数拼接数组 如果需要按行或列动态添加数据,可以使用 `cat` 函数进行拼接。 ```matlab E = []; for i = 1:3 row = [i, i+1, i+2]; E = cat(1, E, row); % 按行拼接 end disp(E) ``` 该方法同样适用于多维数组的构建。 ### 6. 使用 `arrayfun` 或 `cellfun` 进行动态构造 对于函数映射类操作,可以结合 `arrayfun` 或 `cellfun` 来动态生成数组。 ```matlab F = arrayfun(@(x) x^2, 1:5); disp(F) ``` ### 总结 - 如果数据规模未知,可使用空数组初始化并逐步扩展。 - 若已知最终大小,应优先使用预分配策略以提升性能。 - 对于异构数据,推荐使用元胞数组。 - 在需要结构化拼接时,可使用 `cat` 函数。 - 利用函数式编程工具如 `arrayfun` 可简化代码逻辑。 合理选择动态创建数组的方式,有助于提高代码的执行效率与可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值