C++如何在不丢失数据的情况下调整动态数组的大小

C++ How to resize a dynamic array without losing data?

本文关键字:调整 情况下 动态 数组 数据 C++      更新时间:2023-10-16

我需要在不丢失数据的情况下调整动态数组的大小。

像这样:

double * pVecDin;//POINTER
int num_values = 2;
pVecDin = new double[num_values];
pVecDin[0]=5;
pVecDin[1]=6;

int new_num_values=4;
pVecDin = new double[new_num_values];

//Next I lost value of pVecDin[0] and pVecDin[1]
pVecDin[2]=8;
pVecDin[3]=9;

我需要制作一个Auxiliar Dynamic Array来复制旧值吗
类似:

int new_num_values=4;
double * pVecDin_aux; //POINTER
pVecDin_aux = new double[new_num_values];
pVecDin_aux = pVecDin;
for(int i=0; i < n; i++)
{
  pVecDin_aux[i] = pVecDin[i];
}
  1. 使用新的所需大小创建一个新的空数组
  2. 将旧数组中的所有内容复制到新数组中
  3. 删除旧数组
  4. 将旧数组的指针分配给新数组的地址

或者使用vector

正如nhgrif所提到的,您需要制作数组的副本。

还有另一种方法,如果可以使用malloc进行内存分配,那么可以使用realloc来调整阵列的大小。

如其他同类建议的那样,有更好的方法来使用std::vectorlist

相关文章: