如何在c++中声明一个类中的二维数组



我想在一个类中声明一个2D数组。数组的大小将在构造函数中初始化。在Java中,我可以在

中执行此操作
public class A {
  public int[][] indices;
  A(int a,int b){
     indices = new int[a][b];
  }
}

如何在c++中执行相同的操作?

使用vector of vector:

std::vector<std::vector<squares>> squares;

并在构造函数中初始化:

squares.resize(xPos);
for (int i = 0; i < xPos; i++) {
    squares[i].resize(yPos);
}

在c++中,2D数组更流行的方式是使用2D向量。这将有许多好处。

  1. 您也可以通过[][]访问元素。
  2. 尺寸是动态涂覆的,所以你可以随时增加myVector.push_back(vec)myVector[i].push_back(x)的尺寸。

简单地说,它有点像Java中的ArrayList

可以用

#include <vector>
public class A {
    std::vector<std::vector<int>> indices;
    //...
}

既然你的答案已经有了解决方案,我建议你做一些不同的事情。处理二维或多维数组。我认为指针比向量快得多。你可以说我们应该充分利用技术。但然后我建议你使用一个名为uBLAS的库,它使数组的处理变得容易。文档可以在这里找到,并像这样使用:

int main () {
    using namespace boost::numeric::ublas;
    matrix<double> m (3, 3);
    for (unsigned i = 0; i < m.size1 (); ++ i)
        for (unsigned j = 0; j < m.size2 (); ++ j)
            m (i, j) = 3 * i + j;
    std::cout << m << std::endl;
}

你可以像这样在c++类

中声明一个原始数组
class C {
    int** someArray;
    public: 
        C() {
            someArray = new int*[ SIZE_GOES_HERE ];
            for( unsigned int j = 0; j < SIZE_GOES_HERE; ++j )
                someArray[ j ] = new int[ SECOND_SIZE ];
        }
};

记住以后管理内存它的作用是声明一个双指针,它指向一个指针的数组,这个指针的数组又指向一个创建2d数组的数组。

相关内容

  • 没有找到相关文章