我想在一个类中声明一个2D数组。数组的大小将在构造函数中初始化。在Java中,我可以执行此操作
public class A {
public int[][] indices;
A(int a,int b){
indices = new int[a][b];
}
}
如何在C ++中执行相同的操作?
答案 0 :(得分:3)
使用矢量矢量:
std::vector<std::vector<squares>> squares;
并在构造函数中初始化:
squares.resize(xPos);
for (int i = 0; i < xPos; i++) {
squares[i].resize(yPos);
}
答案 1 :(得分:2)
在c ++中,2D阵列更流行的方式是使用2D矢量。这会有很多好处。
[][]
访问元素。myVector.push_back(vec)
或myVector[i].push_back(x)
增加尺寸。要简要描述一下,它就像ArrayList
中的Java
。
所以也许使用
#include <vector>
public class A {
std::vector<std::vector<int>> indices;
//...
}
答案 2 :(得分:1)
由于已经有解决方案,我会提出不同的建议。
处理2D或多D阵列。我认为指针比矢量快得多。你总是可以说我们应该充分利用技术。但是我建议你使用一个名为uBLAS
的库,这样可以轻松处理数组。
可以找到文档here并将其用作:
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;
}
答案 3 :(得分: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数组。