我有一份家庭作业。我不是在找任何人为我做这项工作,我只是遇到了一个方面的问题,虽然我也接受其他方面的建议。
作业是:
使用二维动态数组编写一个类。
构造函数传递数组的维度。构造函数还将动态数组中的所有值初始化为行索引乘以列索引。
- 交换二维数组的两列,其中列索引作为参数传入。仅通过复制地址而不是列elemnets的值来执行此操作。
- 删除二维数组的列,其中列索引作为参数传入。不要只在列数组上使用delete运算符,并将水平数组元素设置为NULL。将水平阵列的大小缩小为1。
- 为类创建打印函数以打印出二维数组的值,并确保您的函数正常工作。在您知道它们正常工作后,请删除打印功能。
醇>
我需要帮助了解如何在私有部分声明2D数组。并且,正如所提到的,如果有人能给我关于如何做到这一点的其他提示,那将不胜感激。
答案 0 :(得分:7)
自从我完成C ++开发以来已经有一段时间了,但如果我没记错的话,你会做类似的事情:
int rows = 5;
int cols = 10;
int** array = new int*[rows];
for (int i = 0; i < rows; i++) {
array[i] = new int[cols];
}
我可能弄错了;我在网上看到相反的帖子,你必须使用单维数组伪造2D数组并更改你的下标:
http://en.allexperts.com/q/C-1040/creating-2D-array-dynamically.htm
答案 1 :(得分:1)
这应该会给你一个想法。我还没有尝试编译这段代码:
class Array {
int **arr;
};
Array::Array(int rows, int cols) {
arr = new int * [rows]; // this will allocate 'rows' many 'int *'s
if (arr) { // to ensure memory was allocated
for (int i = 0; i < rows; i++) {
arr[i] = new int [cols]; // this will allocate 'cols' many 'int's
assert(arr[i]); // to ensure memory was allocated
}
}
}
arr
是指向int指针数组的指针。 arr[i]
是指向一组int的指针,即每个arr[i]
表示二维数组中的一行。这应该可以帮到你。
如果您真的想学习C ++,请亲自尝试并学习如何使用调试器。如果您对调试器不熟悉,请使用printfs找出问题所在。
答案 2 :(得分:0)
class TwoDimensionalArray {
private:
int **array;
public:
TwoDimensionalArray(const int, const int);
};
TwoDimensionalArray::TwoDimensionalArray(const int rows, const int columns) {
array = new int *[rows];
for (int i = 0; i < rows; i++)
array[i] = new int[columns];
}
int main() {
TwoDimensionalArray *arr1 = new TwoDimensionalArray(5, 10);
return 0;
}