c++ - 复制数组然后删除原来的

标签 c++ arrays

我有一个结构数组(参数为名称和编号),初始数组从我创建的文档中获取元素。初始列表大小从 1000 开始。当列表填满时,我调用另一个我正在努力解决的方法。我希望它能将数据复制到一个大小翻倍的新数组中,然后删除旧数组。

如果我将其命名为:array1 和 array2,我的程序将始终使用 array1。我需要有关指针的帮助,以使 array2 像 array1 一样工作。

有没有办法将数组复制到相同或新大小的临时数组,然后重新制作初始数组重新分配给它?对于这个练习,我不能使用 vector 。虽然我知道如何使用它们,并且它们可以更好地解决这个问题,但我正在尝试仅使用数组来做到这一点。

using namespace std;

struct Information {
  char functionality;
  int SSN;
  string name;
};

int numPeople = 1000;

//Gets called if the initial array (whatever size) is filled
void doubleArray(Information *array){
  numPeople = numPeople * 2;
  //Will now be the doubled array size
  Information temp[numPeople]
  for(int i = 0; i < numArray; i++){
    temp[i].SSN = array[i].SSN;
    temp[i].name = array[i].name;
  }
  //Normally makes it crash
  delete[] array;
}

编辑:这是我目前拥有的

void doubleArray(Information *person){
  numPeople = numPeople * 2;
  Information* temp = new Information[numPeople];
  memcpy(temp, person, numPeople);
  delete[] person;
  person = temp;
}

它达到 numPeople = 1000(初始列表大小),但很快就崩溃了。加倍排列是否正确?

最佳答案

数组是固定大小的。您不能更改原始数组的容量。

{使用std::vector

你可以有一个指向数组的指针。并使用相同的指针。当数组已满时,您可以分配另一个数组,将旧数组项复制到新数组,删除旧数组并将数组指针分配给新数组。

{我有没有提到 std::vector

顺便说一句,有一种数据结构可以根据需要执行调整大小。如果我没记错的话,它是 std::vector。试试看。 :-)

关于c++ - 复制数组然后删除原来的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35759783/

相关文章:

ios - NSArray代码未运行

c - 将大写字母从 char 数组分离到新数组中,并在 C 中为其重新分配内存

c - C Blackjack 游戏的 int 数组缺少输出

c++ - 是否可以同时在 GPU 上运行 2 个内核并相互通信?

c++ - 如何在 MSVC 中为传递给可变参数函数的非 POD 参数启用警告/错误?

c++ - 默认模板参数部分特化

c# - 返回 Array 和 IList<> 有什么区别? (RE : Eric Lippert's harmful arrays)

c++ - 模板中的模板——从模板类型访问包含的类型

c++ - Xcode 10 更新后 CMake 找不到 stdc++11

java - 如何访问 double 值列表?