2017-05-29 8 views
0

Ich bin eine C# Klasse C++ konvertieren, und ich bin derzeit an den folgenden Teilen blockiert:C# Multidimensionale Arrays in 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]; 
} 

Ich habe keine Ahnung, wie diese mehrdimensionale Arrays in C++ auszudrücken. Kann jemand helfen? :)

+0

Sie würden mehrdimensionale Arrays mit Zeigern erstellen müssen. Im Grunde erstellt man die erste Dimension mit 'new' und iteriert sie dann mit' new' für jede Zelle oder jedes Element. – pandoragami

+1

@pandoragami _ "Sie müssten mehrdimensionale Arrays mit Hilfe von Zeigern erstellen" _ Huh ?? Das ist die schlechteste Wahl. –

+0

Zeige mir einen anderen Weg @ πάντα ῥεῖ. – pandoragami

Antwort

3

Die Äquivalente für feste dimensionierte mehrdimensionale Arrays in C++ ist die std::array Container-Klasse:

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; 
}; 

Siehe Live Demo

+0

Warum nicht statisch constexpr? – vinnylinux

+0

@vinnylinux In der Tat, du hast Recht. Es funktioniert nicht (http://coliru.stacked-crooked.com/a/3dc0c96795640fac) ohne 'static'. –

+0

Mit std :: array, wie würdest du das schreiben? 'g2 [i, j] = (float) (rnd.Next (B + B) - B)/B;' – vinnylinux