使用二维动态数组编写类

时间:2009-10-07 19:31:45

标签: c++ arrays dynamic class

我有一份家庭作业。我不是在找任何人为我做这项工作,我只是遇到了一个方面的问题,虽然我也接受其他方面的建议。

作业是:

  

使用二维动态数组编写一个类。

     

构造函数传递数组的维度。构造函数还将动态数组中的所有值初始化为行索引乘以列索引。

     
      
  1. 交换二维数组的两列,其中列索引作为参数传入。仅通过复制地址而不是列elemnets的值来执行此操作。
  2.   
  3. 删除二维数组的列,其中列索引作为参数传入。不要只在列数组上使用delete运算符,并将水平数组元素设置为NULL。将水平阵列的大小缩小为1。
  4.   
  5. 为类创建打印函数以打印出二维数组的值,并确保您的函数正常工作。在您知道它们正常工作后,请删除打印功能。
  6.   

我需要帮助了解如何在私有部分声明2D数组。并且,正如所提到的,如果有人能给我关于如何做到这一点的其他提示,那将不胜感激。

3 个答案:

答案 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;
}