如何动态增加数组大小?

时间:2012-08-20 04:16:57

标签: c++

我一直在尝试制作一个添加2个不同大小数组的程序。但我想知道动态增加阵列大小容量?例如:array [4]然后将大小升级为2来制作数组[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;

3 个答案:

答案 0 :(得分:14)

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

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

  2. 复制您要保留的先前值。

  3. 删除[]旧数组。

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

答案 1 :(得分:3)

   int* newArr = new int[new_size];
   std::copy(oldArr, oldArr + std::min(old_size, new_size), newArr);
   delete[] oldArr;
   oldArr = newArr;

答案 2 :(得分:0)

#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;
}