如何在C++类中声明一个二维数组?

4
我想在一个类中声明一个二维数组。数组的大小将在构造函数中初始化。在Java中,我可以这样操作:
public class A {
  public int[][] indices;

  A(int a,int b){
     indices = new int[a][b];
  }
}

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


使用2D向量或自定义矩阵。 - chris
1
你需要indices像二维数组一样由连续的内存组成,还是只想能够像访问二维数组一样对它们进行索引? - jxh
我不需要连续的内存。 - pcoder
4个回答

3

使用一个向量的向量:

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

在构造函数中进行初始化:

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

2
在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;
    //...
}

1

既然已经有了解决方案,我建议提供一些不同的东西。处理2D或多维数组时,我认为指针比向量快得多。你总是可以争辩说我们应该充分利用技术。但是我建议您使用一个名为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;
}

0
在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数组的数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接