Ihr Ziel ist es, eine Gitterklasse mit den Datenelementen NR, NC und einem 2D-Array-Koordinatensystem zu erstellen [NR][NC]. Sie möchten NR und NC über den Klassenkonstruktor initialisieren und eine dynamische Speicherzuweisung vermeiden, um die Speichernutzung zu optimieren und Cache-Fehler zu minimieren.
Um dies zu erreichen, sollten Sie die Verwendung von std::vector in Betracht ziehen, das eine zusammenhängende Speicherzuweisung bereitstellt. Hier ist eine modifizierte Version Ihres Codeausschnitts:
class grid { public: vector<double> coordinates; unsigned NR, NC; grid(unsigned NR, unsigned NC) : NR(NR), NC(NC), coordinates(NR * NC) {} double& operator()(unsigned r, unsigned c) { return coordinates[r * NC + c]; } }; int main() { grid g(2, 3); g(0, 0) = 1; g(1, 2) = 6; }
Diese Klasse definiert ein 2D-Array mithilfe eines zusammenhängenden Vektors. Die Methode „operator()“ bietet eine bequeme Möglichkeit, mithilfe von Zeilen- und Spaltenindizes auf Elemente zuzugreifen.
Dieser Ansatz vermeidet eine dynamische Zuweisung, sorgt für eine zusammenhängende Speicherzuweisung und gewährleistet eine effiziente Speichernutzung.
Das obige ist der detaillierte Inhalt vonWie kann ich ein 2D-Array statisch als Klassendatenmitglied in C deklarieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!