11

我一直在尝试制作一个添加 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;
4

5 回答 5

21

你不能改变数组的大小,但你不需要。您可以分配一个更大的新数组,复制要保留的值,删除原始数组,然后更改成员变量以指向新数组。

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

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

  3. 删除[] 旧数组。

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

于 2012-08-20T04:19:40.810 回答
9
   int* newArr = new int[new_size];
   std::copy(oldArr, oldArr + std::min(old_size, new_size), newArr);
   delete[] oldArr;
   oldArr = newArr;
于 2014-01-19T06:31:21.373 回答
0

回答可能为时已晚,但我会向您解释一些事情..

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

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;
于 2021-12-25T02:47:31.963 回答
0
#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;
}
于 2021-12-15T09:36:21.997 回答
-1
#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;
}
于 2019-09-07T06:48:39.357 回答