我有一个结构数组(参数为名称和编号),初始数组从我创建的文档中获取元素。初始列表大小从 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/