代码之家  ›  专栏  ›  技术社区  ›  Martijn Courteaux

C++:二维数组:一维固定?

  •  3
  • Martijn Courteaux  · 技术社区  · 15 年前

    我要通过考试 double [][6] 一种方法。但我不知道如何创建二维数组。

    6 是一个固定的大小(如果我的术语正确的话,也可以是一个“文字常量”),方法接受它。我尝试过这样的事情,但是没有成功。。。

    double *data[6] = new double[6][myVariableSize];
    

    所以,这个方法看起来就像:

    int myMethod(double obj_data[][6]);
    

    提前谢谢

    5 回复  |  直到 15 年前
        1
  •  3
  •   finnw    15 年前

    我无法从哪个维度是哪个维度的问题上判断,但这可能值得一试:

    double (*data)[6] = new double[myVariableSize][6];
    
        2
  •  3
  •   Kirill V. Lyadvinsky    15 年前

    在C++中你可以使用 std::array<std::vector<double>, 6> .

    typedef std::array<std::vector<double>, 6> my_array_t;
    
    int myMethod( const my_array_t& obj_data );
    

    如果编译器仍然不支持 std::array boost::array 相反。

        3
  •  3
  •   Ole Dittmann    15 年前

    这应该起作用:

    int myMethod(double obj_data[][6])
    ...
    int myVariableSize = 10;
    double (*data)[6] = new double[myVariableSize][6];
    myMethod(data);
    

    如前所述,只有第一个维度是可变的!

        4
  •  1
  •   Jon Cage    15 年前

    您的方法定义应该如下所示(以匹配您的定义):

    int myMethod(double obj_data[6][]);
    

    但是这不是有效的C++,因为只有第一个维度是不可定义的。请尝试以下操作:

    int myMethod(double **obj_data, const int numOfColumns, int numOfRows)
    {
        // Set the element in the last column / row to 5
        obj_data[numOfRows-1][numOfColumns-1] = 5;
    
        return 0;
    }
    
    
    int main(int argc, char* argv[])
    {
        // Define array size
        int myNumOfRows = 5;
        const int numOfColumns = 6;
    
        // Allocate memory
        double** data = new double*[myNumOfRows];
        for (int i = 0; i < myNumOfRows; ++i)
        {
            data[i] = new double[numOfColumns];
        }
    
        // Do something with the array
        myMethod(data, numOfColumns, myNumOfRows);
    
        return 0;
    }
    
        5
  •  0
  •   C.J.    15 年前

    我和我的同事无法理解你提出的问题。但这确实有效,而且确实可以编译:

    int myMethod(double** obj_data)
    {
        return 5;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        const int myVariableSize = 3;
        double** b = new double*[3];
        for (int i = 0 ; i < 3;i++)
        {
            b[i] = new double[myVariableSize];
        }
    
        myMethod(data);
    
        return 0;
    }