可以说,我有
int *p;
p = new int[5];
for(int i=0;i<5;i++)
*(p+i)=i;
Run Code Online (Sandbox Code Playgroud)
现在我想在数组中添加第6个元素.我该怎么做?
Kim*_*man 26
您必须重新分配数组并复制数据:
int *p;
p = new int[5];
for(int i=0;i<5;i++)
*(p+i)=i;
// realloc
int* temp = new int[6];
std::copy(p, p + 5, temp); // Suggested by comments from Nick and Bojan
delete [] p;
p = temp;
Run Code Online (Sandbox Code Playgroud)
你不能.您必须使用动态容器,例如STL向量.否则,您可以创建另一个更大的数组,然后将第一个数组中的数据复制到其中.
原因是数组表示内存中的连续区域.对于上面的示例,假设p指向地址0x1000,并且五个int对应于20个字节,因此数组在0x1014的边界处结束.编译器可以自由地将其他变量放在内存中,从0x1014开始; 例如,int i
可能占用0x1014..0x1018.如果你然后扩展了数组,使它占用了四个字节,会发生什么?
如果您使用分配初始缓冲区,malloc
则可以使用它realloc
来调整缓冲区大小。您不应该使用realloc
调整new
-ed 缓冲区的大小。
int * array = (int*)malloc(sizeof(int) * arrayLength);
array = (int*)realloc(array, sizeof(int) * newLength);
Run Code Online (Sandbox Code Playgroud)
然而,这是一种 C 风格的做事方式。您应该考虑使用vector
.