2017-05-29 108 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