如何将值放入数组的动态数组中,并在c++中删除它们
How can I put values inside dynamic arrays of arrays and also delete them in c++
请记住,我不能使用类或向量,只能使用数组。
无论如何,到目前为止我有这样的东西:
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!
相关文章:
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- 在 Cython 中创建一个连续数组并将其传递给C++
- 附加动态数组并在完成后将其大小加倍
- C++ 循环逐行写入文件还是添加到数组并在循环后写入文件?
- 如何在 VBA/Excel 中创建字符串数组并将其发送到C++ DLL,以便可以在 DLL 中循环访问它
- 编写一个递归功能,该功能采用数组并以相反顺序显示元素,而无需在末尾启动数组的索引
- C++如何在函数中传递字符串数组并分配给变量?
- 如何在类中初始化数组并为第一个元素设置值
- 在这里,我编写了一个使用 2 维数组并打算执行行和的 C++ 代码,但它没有给出正确的输出
- 在 C++ 中创建动态数组并返回两个值
- 返回一个结构数组并在主类中使用
- 将整数数组存储在堆上并通过指针访问它们
- 在类中声明数组并使用它
- 如何将预类型化文件转换为并行数组并在 c++ 中找到最大的数字
- 使用memcpy移动数组并在给定位置插入一个新元素
- 创建 2D 数组并在每个数据槽中填充不同字符的最简单方法是什么?
- 需要帮助创建数组并在另一个函数中编辑它,并将其发送回初始函数
- 返回数组并在另一个函数中使用它
- 如何新建一个int数组并在同一行中设置值
- 实例化 2D 数组并在C++中使用它