繁体   English   中英

如何在C ++中声明一个类中的2D数组?

[英]How to declare a 2D array within a class in C++?

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

public class A {
  public int[][] indices;

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

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

使用矢量矢量:

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[i].push_back(x) myVector.push_back(vec)myVector[i].push_back(x)来增加大小。

简而言之,它就像JavaArrayList

所以也许使用一个

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

由于已经有解决方案,我建议不同的东西。 处理2D或多D阵列。 我认为指针比矢量快得多。 你总是可以说我们应该充分利用技术。 但后来我建议你使用一个名为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 ];
        }
};

稍后再回想一下管理memry它的作用是声明一个双指针,它将指向一个指针数组,这些指针将指向创建二维数组的数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM