【问题标题】:How to dynamically increase the array size?如何动态增加数组大小?
【发布时间】:2022-02-22 14:07:38
【问题描述】:

我一直在尝试制作一个添加 2 个不同大小的数组的程序。但我想知道动态增加数组大小容量?例如:array[4] 然后将大小升级为 2 以制作 array[6];? 编辑:不使用向量

我尝试创建一个新的 ptr,但它不起作用。我收到错误:只读变量不可分配。

int *ptr2 = new int[a2.size];


            // new ptr2 copies ptr1
            for (int i=0; i<(a1.size); i++) {
                ptr2[i] = a1.ptr[i];
            }


            // we want ptr1 to point to ptr2
            for (int i=0; i<(a2.size); i++) {
                ptr2[i] += a2.ptr[i];
            }

            delete [] a1.ptr;

            a1.ptr=ptr2;

【问题讨论】:

  • 为什么不使用矢量?它确实,你想要什么..
  • 我不想使用向量。我在哪里可以分配新的内存?你为什么这么快就投反对票?
  • @EEstud - 您可以在构造函数中分配内存。我对这个问题投了反对票……但是。

标签: c++


【解决方案1】:

您无法更改数组的大小,但您不需要这样做。您可以只分配一个更大的新数组,复制您要保留的值,删除原始数组,然后将成员变量更改为指向新数组。

  1. 分配一个 new[] 数组并将其存储在一个临时指针中。

  2. 复制之前要保留的值。

  3. 删除[]旧数组。

  4. 更改成员变量ptrsize 以指向新数组并保持新大小。

【讨论】:

  • 你不能在用new[]分配的块上使用realloc
  • 说得好,我实际上并没有看代码并认为 C 是我的错误。
  • 一般情况下,不要将 new/delete 与 *alloc/free 混用。
  • 他可以切换到malloc/free,因为他的类型是POD,或者更好的是,只需使用vector。最终,您需要学习如何正确使用所有这些东西。
  • 请勿使用new/delete,除非作为学习体验。 c++ 有智能指针和容器类。
【解决方案2】:
   int* newArr = new int[new_size];
   std::copy(oldArr, oldArr + std::min(old_size, new_size), newArr);
   delete[] oldArr;
   oldArr = newArr;

【讨论】:

    【解决方案3】:
    #include<bits/stdc++.h>
    using namespace std;
    
    main(){
        
        int *p = new int[5]; // locate memory in heap
        int *q = new int[10];// locate memory in heap
        
        for(int j=0; j<5;j++)
            p[j] = j;
        
        for(int i=0; i<5;i++)
            q[i] = p[i];
            
        delete []p;//Delete the old array 'p'
        p = q; // Assign the pointer of 'q' to 'p'
        q = NULL; // delete the location of pointer 'q'
        
        return 0;
    }
    

    【讨论】:

      【解决方案4】:

      现在回答可能太晚了,但我会向你解释一些事情..

      由于内存中的连续内存分配,无法增加数组大小。 例如 => 每个位置的地址是

      arr[5] => [2001,2002,2003,2004,2005]

      现在,主要问题是如果你将它分配给 arr[10] 那么,因为我们不知道下一个位置 2006 将是 free 。 因为数组需要连续,所以我们无法分配内存

      根据我的建议使用 Vector 或在 Cpp 中使用动态内存分配

      int *old = new int[5];
      int *nw = new int[10];
      
      for (size_t i = 0; i < sizeof(old); i++)
          nw[i] = old[i];
      
      delete []old;
      old = nw;
      nw = NULL;
      

      【讨论】:

        【解决方案5】:
        #include <stdio.h>
        #include <stdlib.h>
        int main()
        {
        int *p,*q;
        int i;
        p=(int *)malloc(5*sizeof(int));
        p[0]=3;p[1]=5;p[2]=7;p[3]=9;p[4]=11;
        q=(int *)malloc(10*sizeof(int));
        for(i=0;i<5;i++)
        q[i]=p[i];
        free(p);
        p=q;
        q=NULL;
        for(i=0;i<5;i++)
        printf("%d \n",p[i]);
        return 0;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-20
          • 2018-12-29
          • 2013-06-06
          • 1970-01-01
          相关资源
          最近更新 更多