【问题标题】:Write a class using a two-dimensional dynamic array使用二维动态数组编写一个类
【发布时间】:2010-12-04 18:10:12
【问题描述】:

我有一个家庭作业。我不是在寻找任何人来为我做这项工作,我只是在一个小方面遇到了麻烦,尽管我也会接受其他方面的建议。

作业是:

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

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

  1. 交换二维数组的两列,其中列索引作为参数传入。只需复制地址,而不是列元素的值即可。
  2. 删除二维数组的一列,其中列索引作为参数传入。不要只对列数组使用删除运算符并将水平数组元素设置为 NULL。将水平数组的大小缩小 1。
  3. 为该类创建一个打印函数以打印出二维数组的值并确保您的函数正常工作。知道它们工作正常后,删除打印功能。

我需要帮助了解如何在私有部分中声明二维数组。而且,如前所述,如果有人可以就如何做到这一点给我其他提示,我将不胜感激。

【问题讨论】:

    标签: c++ arrays dynamic class


    【解决方案1】:

    我已经有一段时间没有做 C++ 开发了,但是如果我没记错的话,你会做如下的事情:

    int rows = 5;
    int cols = 10;
    
    int** array = new int*[rows];
    for (int i = 0; i < rows; i++) {
         array[i] = new int[cols];
    }
    

    我可能弄错了;我在网上看到相反的帖子,您必须使用一维数组伪造二维数组并更改下标:

    http://en.allexperts.com/q/C-1040/creating-2D-array-dynamically.htm

    【讨论】:

    • 谢谢,我猜你的答案定义了实现部分的一部分,所以最后我应该有这样的东西:class TwoDimensionalArray { private: int **array;公共:二维数组(常量 int,常量 int); }; TwoDimensionalArray::TwoDimensionalArray(const int rows, const int columns) { array = new int*[rows]; for(int i=0; i
    • 如果你使用new你必须使用delete。
    【解决方案2】:

    这应该会给你一个想法。我还没有尝试编译这段代码:

    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] 是一个指向整数数组的指针,即每个 arr[i] 代表二维数组中的一行。这应该可以帮助您入门。

    如果您真的想学习 C++,请自己尝试并学习如何使用调试器。如果您还不习惯调试器,请使用 printfs 找出问题所在。

    【讨论】:

      【解决方案3】:
      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;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-11-16
        • 2016-03-18
        • 1970-01-01
        • 2018-05-05
        • 2018-05-17
        • 2020-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多