复制数组然后删除原始

时间:2016-03-02 22:50:11

标签: c++ arrays

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

如果我命名它:array1和array2,我的程序使用array1。我需要帮助指出将使array2作为array1工作的指针。

有没有办法将数组复制到相同或新大小的临时数组,然后将重新分配的初始数组重新分配给它?对于本练习,我不能使用向量。虽然我知道如何使用它们,并且它们在更好的情况下解决了这个问题,但我只是尝试使用数组。

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(初始列表大小),但之后不久崩溃。双倍阵列是否正确?

3 个答案:

答案 0 :(得分:1)

阵列是固定大小的。您无法更改原始阵列的容量。

{使用std::vector }

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

{我提到了std::vector吗?}

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

答案 1 :(得分:0)

假设您正在使用std::array(您应该使用),那么复制数组非常容易。

std::array<myStruct, 1000> array1{};
std::array<myStruct, 2000> array2{};
// codes...
std::copy(array1.begin(), array1.end(), array2.begin())

但是,这是您只使用这两个数组的特定方案。它不会动态地使数组的大小加倍,因为您无法使用基于堆栈的数组动态地执行此操作,就像c数组[]一样。

您可以而且应该使用的是std::vector<myStruct>。这将根据您的需要动态增长。在您向我们提供代码和更具体的问题之前,这是我可以提供的最佳建议。

答案 2 :(得分:0)

如果您不允许使用std::vector作为您的评论之一,那么您需要查看动态分配。

size_t sz = [whatever];

// Dynamically allocate an array of size sz.
T* T_array = new T[sz];

// Do whatever...

delete[] T_array; // new[] needs to be paired with delete[].
T_array = nullptr; // Not strictly necessary, but a good idea if you have more code after.

由于动态数组的大小不需要是常量,因此可以根据需要分配内存。然后,您可以使用std::copy()将数据从一个数组复制到另一个数组,作为Goodies mentioned

[有关动态分配的详细信息,请参阅here。]