如何将值放入数组的动态数组中,并在c++中删除它们

How can I put values inside dynamic arrays of arrays and also delete them in c++

本文关键字:数组 并在 删除 c++ 动态      更新时间:2023-10-16

请记住,我不能使用类或向量,只能使用数组。

无论如何,到目前为止我有这样的东西:

int** arrays = new int*[10]; 
arrays[0] = new int[99]; 
arrays[1] = new int[47]; 

我不完全确定,但我认为可以像对待2D数组一样,在指向的数组中放置值。

这样的东西行得通吗?

arrays[1][30] = 5;

此外,如果我想删除其中一个数组(而不是数组指针),是否可以这样做:

delete[] arrays;

在C++中,每个对new的调用都应该有匹配的调用来删除。因此,当您初始化阵列时

int **arrays = new int*[10];
arrays[0] = new int[99]; 
arrays[1] = new int[47];

你必须用删除它

delete [] arrays[0];
delete [] arrays[1];
delete [] arrays;

在一般情况下,阅读这个答案和整个线索。

呼叫

arrays[1][30] = 5;

很好,因为内存已经分配。

按顺序:是会(有风险),不是不会。

对于第一个,您需要记住(因为总是)数组中有多少元素,这样您就不会跑到最后。每种方法都可以使用一种结构:

typedef struct {
    int len;
    int* contents;
} FiniteArray;

然后使int** arrays实际上是FiniteArray结构的阵列,其本身是FiniteArray*

如果你百分之百地使用数组,你仍然可以,只要始终保持长度不变。当然,别忘了:你也需要arrays中的元素数量!

对于delete[]的第二部分,这将删除数组,但将保留已分配的其余内存

您是正确的,当您对数组使用new时,您将使用delete[]。否则,对于对象,请使用delete等。请参阅此问题。是的,我知道这是一个副本,但我认为它比它标记的副本更能解释这一点。

无论如何,如果要删除arrays,则需要首先解除分配各个阵列。在您的情况下,

delete[] arrays[0];
delete[] arrays[1];
delete[] arrays;
arrays = NULL; // always a good idea!

只是删除一个数组,比如说,第一个数组,

delete[] arrays[0];
arrays[0] = NULL; // always a good idea!