/ / Rückgabe einer Matrix mit konstanten Werten in C ++ - C ++, Arrays, Zeigern

Rückgabe einer Matrix mit konstanten Werten in C ++ - C ++, Arrays, Zeigern

Wie kann ich ein 2d Array von konstanten Werten von einer Funktion zurückgeben? Ich muss etwas wie folgt zurückgeben:

//I don"t even know if this is the best way to do 2d arrays in c++.
const int matrix[4][2] = {
{10,11},
{12,13},
{14,15},
{16,17}
};

Hier, was ich versucht habe:

#include <iostream>

using namespace std;

int** createMatrix();

int main(){
int **m = createMatrix();
return 0;
}

const int** createMatrix(){
const int **matrix = new const int*[4];

matrix[0] = new const int[2] = {10,11};
matrix[1] = new const int[2] = {12,13};
matrix[2] = new const int[2] = {14,15};
matrix[3] = new const int[2] = {16,17};

return matrix;
}

Der Ausgang, den ich bekam:

main.cpp: In der Funktion 'const int ** createMatrix ()': main.cpp: 12: 13: Fehler: Ambiguieren der neuen Deklaration von 'const int ** createMatrix ()' const int ** createMatrix () { ^ ~~~~~~~~~~

main.cpp: 5: 7: note: alte Deklaration 'int ** createMatrix ()' int ** createMatrix (); ^ ~~~~~~~~~~

main.cpp: 15: 29: Fehler: nicht initialisiertes const in 'new' von 'const int' Matrix [0] = neu const int [2] = {10,11}; ^

main.cpp: 16: 29: Fehler: nicht initialisiertes const in 'new' von 'const int' matrix [1] = neu const int [2] = {12,13}; ^

main.cpp: 17: 29: Fehler: nicht initialisiertes const in 'new' von 'const int' matrix [2] = neu const int [2] = {14,15}; ^

main.cpp: 18: 29: Fehler: nicht initialisiertes const in 'new' von 'const int' matrix [3] = neu const int [2] = {16,17};

Antworten:

0 für die Antwort № 1

Die Funktionsdeklaration und die Funktionsdefinition haben unterschiedliche Rückgabetypen.

int** createMatrix();

und

const int** createMatrix(){

Auch so eine Initialisierung wie diese

matrix[0] = new const int[2] = {10,11};

ist falsch.

Es scheint, du meinst Folgendes

#include <iostream>

const int** createMatrix();

int main()
{
const int **m = createMatrix();
return 0;
}

const int ** createMatrix()
{
const int **matrix = new const int*[4];

matrix[0] = new const int[2] {10,11};
matrix[1] = new const int[2] {12,13};
matrix[2] = new const int[2] {14,15};
matrix[3] = new const int[2] {16,17};

return matrix;
}

2 für die Antwort № 2

Die einfache Lösung besteht darin, ein Array von Arrays zu erstellen, wie Sie es zuerst zeigen, und das zurückzugeben.

Mach es static innerhalb der Funktion, so dass ihre Lebensdauer nicht enden wird. Und denken Sie daran, den richtigen Typ zurückzugeben (ein Array von Arrays ist nicht dasselbe wie ein Zeiger auf einen Zeiger).

Optional verwenden std::array anstelle von einfachen C-artigen Arrays.

Wenn die Größe zur Laufzeit konfigurierbar ist, verwenden Sie std::vector.


0 für die Antwort № 3

Sie sollten es als ein 1d Array der Länge speichern (xsize * ysize) das ist angeblich besser als das Speichern von 2D-Arrays.