2017-05-29 103 views
0

我一个C#类转换成C++和我目前由以下部分阻止:C#多维数组在C + +?

public class Perlin 
{ 
    const int B = 0x100; 
    const int BM = 0xff; 
    const int N = 0x1000; 

    int[] p = new int[B + B + 2]; 
    float[,] g3 = new float [B + B + 2 , 3]; 
    float[,] g2 = new float[B + B + 2,2]; 
    float[] g1 = new float[B + B + 2]; 
} 

我对如何表达用C的多维数组++不知道。谁能帮忙? :)

+0

你必须创建一个使用指针多维数组。基本上你用'new'创建第一个维度,然后用'new'对每个单元或元素进行迭代。 – pandoragami

+1

@pandoragami _“你必须使用指针创建多维数组”_Hh ??这是最糟糕的选择。 –

+0

让我看看另一种方式@πάνταῥεῖ。 – pandoragami

回答

3

最接近的等效在C尺寸固定多维数组++是std::array容器类:

class Perlin 
{ 
    static constexpr int B = 0x100; 
    static constexpr int BM = 0xff; 
    static constexpr int N = 0x1000; 

    std::array<int,B + B + 2> p; 
    std::array<std::array<float,B + B + 2>,3> g3; 
    std::array<std::array<float,B + B + 2>,2> g2; 
    std::array<float,B + B + 2> g1; 
}; 

Live Demo

+0

为什么不是静态的constexpr? – vinnylinux

+0

@vinnylinux事实上,你是对的。它[不起作用](http://coliru.stacked-crooked.com/a/3dc0c96795640fac)没有'static'。 –

+0

用std :: array,你会怎么写? 'g2 [i,j] =(float)(rnd.Next(B + B)-B)/ B;' – vinnylinux