将内存分配添加到 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;
根据使用情况,可能还有更有效的方法。例如,如果您不需要对元素进行随机访问,链表可能会更有效。
问题
向已声明的变量添加内存分配的最有效方法是什么?
例如:
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;
根据使用情况,可能还有更有效的方法。例如,如果您不需要对元素进行随机访问,链表可能会更有效。