【问题标题】:How to create 2d array c++?如何创建二维数组 C++?
【发布时间】:2011-10-30 09:30:38
【问题描述】:

我需要在 C++ 中创建二维数组。

int mas= new int[x][y];auto mas= new int[x][y]; 我做不到 我需要动态创建一个数组,例如:

int x,y
auto mas= new int[x][y];//error - must be const.

请帮帮我。

【问题讨论】:

标签: c++ arrays 2d


【解决方案1】:
int x,y;
x =3;
y = 5;
int ** mas = new int*[x];
for (int i=0;i<x;i++)
{
   mas[i] = new int[y];
}

我认为是这样的。 别忘了

for(int i=0;i<x;i++)
   delete[] mas[i];
delete[] mas;

在最后。

【讨论】:

  • 您忘记删除子数组了。
【解决方案2】:

用于创建动态大小数组的 C++ 工具名为 std::vector。然而,向量是一维的,所以要创建一个矩阵,一个解决方案就是创建一个向量的向量。

std::vector< std::vector<int> > mas(y, std::vector<int>(x));

这不是最有效的解决方案,因为您需要为每行的大小不同而付费。您不想为这个“功能”付费,您必须编写自己的二维矩阵对象。比如……

template<typename T>
struct Matrix
{
    int rows, cols;
    std::vector<T> data;

    Matrix(int rows, int cols)
      : rows(rows), cols(cols), data(rows*cols)
    { }

    T& operator()(int row, int col)
    {
        return data[row*cols + col];
    }

    T operator()(int row, int col) const
    {
        return data[row*cols + col];
    }
};

然后你就可以用它了

 Matrix<int> mat(y, x);
 for (int i=0; i<mat.rows; i++)
   for (int j=0; j<mat.cols; j++)
     mat(i, j) = (i == j) ? 1 : 0;

【讨论】:

    【解决方案3】:

    我的建议是首先避免多维数组的痛苦并使用结构。

    struct Point {
        int x;
        int y;
    }
    
    int points = 10;
    Point myArray[points];
    

    然后访问一个值:

    printf("x: %d, y: %d", myArray[2].x, myArray[2].y);
    

    不过,具体取决于您要达到的目标。

    【讨论】:

    • 对数组与矩阵完全不同。在一种情况下,您有 2*n 值,在另一种情况下,您有 n*m 值。
    【解决方案4】:

    您可以自己进行操作。

    int* mas = new int[x*y];
    

    并通过以下方式访问 [i,j]:

    mas[i*y + j] = someInt;
    otherInt = mas[i*y +j];
    

    【讨论】:

    • @Charles Bailey:是正确的。通常,当您定义 matrix[rows][columns] 时,编译器可以将 matrix[x][y] 转换为 matrix[xcolumns +y] 并且一切正常。但是当您将其转换为 int* 时,他不知道如何访问 matrix[x][y]。他必须知道那个尺寸。
    • Charles 和 Roee,感谢您的指正。我编译了一个测试代码但没有运行它——它确实会导致未定义的行为(即崩溃......)。看来我对指针算术有点生疏了……
    【解决方案5】:
    std::vector<std::vector<int> >  mas(y, std::vector<int>(x));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      相关资源
      最近更新 更多