2017-05-05 1 views
0

J'ai essayé mais ça ne marche pas! peut me aider s'il vous plaît ceci est très important :(comment passer tableau dynamique 2d à une fonction sans utiliser les pointeurs?

#include <iostream> 
using namespace std; 
int a[100][100]; 

void read(int a[][100],int n) 
{ 
    int i,j; 
    for(i=0;i<n;i++) 
     for(j=0;j<n;j++) 
    cin>>a[i][j]; 
} 

int main() 
{ 
    int n; 
    cin>>n; 
    int a[n][n]; 
    read(a,n); 
} 
+1

'int a [n] [n];' est VLA et non C++ standard. – Jarod42

+0

Vous devez changer les paramètres. Si vous écrivez 'int n' avant, vous pouvez utiliser la valeur dans la taille du tableau:' void read (int n, int a [] [n]) ' – mch

+0

Vous avez des déclarations contradictoires de' a [] [] ' –

Répondre

2

La syntaxe claire de passer tableau par référence est:

void read(int (&a)[100][100], int n) 

entraînant

#include <iostream> 

void read(int (&a)[100][100], int n) 
{ 
    for(int i = 0; i < n; i++) 
     for(int j = 0; j < n; j++) 
      std::cin >> a[i][j]; 
} 

int main() 
{ 
    int n; 
    std::cin >> n; 
    int a[100][100]; 
    read(a, n); 
} 

mais vous pourriez préférer std::vector:

#include <iostream> 
#include <vector> 

void read(std::vector<std::vector<int>> &mat) 
{ 
    for (auto& v : mat) { 
     for (auto& e : v) { 
      std::cin >> e; 
     } 
    } 
} 

int main() 
{ 
    int n; 
    std::cin >> n; 
    std::vector<std::vector<int>> mat(n, std::vector<int>(n)); 
    read(mat); 
} 
+0

ouais je vais essayer ça –

0

Puisqu'il est étiqueté C++. Je voudrais suggérer l'utilisation de std::vector. C'est un conteneur dynamique qui est très utile. Vous pouvez le redimensionner, effacer le remplir facilement. Une fois que vous aurez compris l'utilisation de base, ils deviendront très utiles dans votre futur développement C++. J'ai modifié votre code légèrement:

#include <iostream> 
#include <vector> 
using namespace std; 

void read(vector<vector<int> >& arr,int n) 
{ 
    int i,j; 
    for(i=0;i<n;i++) 
     for(j=0;j<n;j++) 
      cin>>arr[i][j]; 
} 
int main() 
{ 
    int N; 
    cin>>N; 
    vector<vector<int> > arr(N, vector<int>(N)); 
    read(arr, N); 
} 

Ils ont de nombreux avantages sur les tableaux primitifs comme ils peuvent être initialisés facilement, supposons que vous voulez initialiser tous à zéro:

vector<vector<int> > arr(N, vector<int>(N, 0)); 

Vous n'avez pas s'inquiéter de l'ajout de la taille du tableau à chaque passage dans les fonctions. vecteur peut facilement gérer ceci:

for(i = 0; i < arr.size(); i++) { 
    for(j = 0; j < arr[i].size(); j++) { 
    // do stuff 
    } 
} 

De plus, avec les méthodes ajoutées de la bibliothèque de modèles standard comme fill, swap. De nombreuses opérations peuvent être manipulées facilement.