/ / Restituire una matrice con valori costanti in c ++ - c ++, matrici, puntatori

Restituzione di una matrice con valori costanti in c ++ - c ++, matrici, puntatori

Come posso restituire un array 2d di valori costanti da una funzione? Devo restituire qualcosa del genere:

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

Ecco cosa ho provato:

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

L'output che ho ottenuto:

main.cpp: nella funzione 'const int ** createMatrix ()': main.cpp: 12: 13: errore: ambiguating nuova dichiarazione di 'const int ** createMatrix ()' const int ** createMatrix () { ^ ~~~~~~~~~~~

main.cpp: 5: 7: nota: vecchia dichiarazione 'int ** createMatrix ()' int ** createMatrix (); ^ ~~~~~~~~~~~

main.cpp: 15: 29: errore: const non inizializzato in 'new' di 'const int' matrix [0] = new const int [2] = {10,11}; ^

main.cpp: 16: 29: errore: const non inizializzato in 'new' di 'const int' matrice [1] = new const int [2] = {12,13}; ^

main.cpp: 17: 29: errore: const non inizializzato in 'new' di 'const int' matrice [2] = new const int [2] = {14,15}; ^

main.cpp: 18: 29: errore: const non inizializzato in 'new' di 'const int' matrice [3] = new const int [2] = {16,17};

risposte:

0 per risposta № 1

La dichiarazione della funzione e la definizione della funzione hanno diversi tipi di ritorno.

int** createMatrix();

e

const int** createMatrix(){

Anche una tale inizializzazione come questa

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

non è corretto.

Sembra che tu intenda il seguente

#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 per risposta № 2

La soluzione semplice consiste nel creare una serie di array, come ad esempio il tuo primo spettacolo, e restituirlo.

Fallo static all'interno della funzione in modo che la sua durata non finisca. E ricorda di restituire il tipo corretto (una matrice di matrici non è la stessa di un puntatore a un puntatore).

Opzionalmente usare std::array invece di semplici array in stile C.

Se la dimensione è configurabile in fase di esecuzione, utilizzare std::vector.


0 per risposta № 3

Si dovrebbe considerare di salvarlo come un array di lunghezza 1d (xsize * ysize) questo è, presumibilmente, meglio del salvataggio di array 2d.