将内存分配添加到 C++ 数组

Adding memory allocation to a C++ array

问题

向已声明的变量添加内存分配的最有效方法是什么?

例如:

int n=3;
int m = 4;
int * p;
p = new int[n];
for(int i = 0;i<n;i++) {/*function that stores values in p*/}

从那里如何到达:

p = new int[n+m];

通过复制

我考虑过创建一个具有所需内存分配 (n+m) 的新变量(例如 y),并将 p 的值复制到它,然后将 y 复制到 p。这是最有效的方法吗?

示例:

int * y;
y = new int[n + m];
for(int i = 0; i < n;i++) {y[i] = p[i];}
p = y;
delete [] y;

相关问题:

没有数组分配内存有什么用吗?

示例:

int * p;
p = new int;

什么需要此方法而不是声明 int p

我想你想要的是std::vector。您可以像使用可以动态调整大小的数组一样使用它。

int n=3;
int m = 4;
std::vector<int> p(n);
for(int i = 0;i<n;i++) { ... }

然后

p.resize(n+m);

p超出范围时,内存也会自动释放。

Is that the most efficient way to do this ?

不,这不好,因为您释放了要使用的内容,并且由于不释放不再使用的内容而导致内存泄漏。至少应该是

int * y;
y = new int[n + m];
for(int i = 0; i < n;i++) {y[i] = p[i];}
delete [] p;
p = y;

根据使用情况,可能还有更有效的方法。例如,如果您不需要对元素进行随机访问,链表可能会更有效。