Salut,
comment peut-on déclarer une méthode qui renvoie un tableau d'entiers ?
Je l'ai déclarée comme ceci :
int[] methode(string str){....}
et le compilateur me renvoie ce message d'erreur :
expected unqualified-id before '[' token
Version imprimable
Salut,
comment peut-on déclarer une méthode qui renvoie un tableau d'entiers ?
Je l'ai déclarée comme ceci :
int[] methode(string str){....}
et le compilateur me renvoie ce message d'erreur :
expected unqualified-id before '[' token
Bonjour
Pour retourner un tableau en c++, j'aurai tendance à conseiller les vector : voir la faq. Ils sont puissants et pratiques à utiliser.
Je ne suis pas sur qu'on puisse déclarer une fonction qui renvoie un tableau autrement que par des pointeurs. Mais ca, c'est plutôt du C.
Et en allant dans ce sens, est-ce qu'il y a moyen de déclarer un vecteur tel qu'il serait utilisable comme un tableau à 2 dimensions?
Oui tout à fait :
Et ainsi de suiteCode:vector<vector<int> > tableau;
Je sais que si c'etait un tableau je devrais faire comme ceci :
int[3][4] tab = {{1,8,4,0},{5,6,7,0},{3,0,2,9}};
Comment devrais-je faire pour créer ce même tableau mais avec un vecteur?
La méthode resize() ainsi qu'un tour sur la faq devraient suffire ;)
Code:
1
2
3
4
5
6
7
8
9
10
11
12 vector<vector<int> > v; v.resize(3); for(int i = 0; i < 3; i++) { v[i].resize(4); } //ou mieux avec #include <algorithm> for_each(v.begin(); v.end(); resize(4)); /!\ Attention, je ne suis pas du tout sur de ce dernier exemple de code, mais je me dis qu'un tru ccomme ca doit etre possible
comme te l'as suggéré mabu, les vectors c'est bien.
Il y a une autre solution si tes tableaux ont toujours la même taille, c'est de les englober dans une structure
Code:
1
2
3
4
5
6 struct monTab { int tab[3][4]; }; monTab methode(string str);
Fais un peu de recherche sur ce forum, le sujet est abordé régulièrement.
Je voudrais créer une méthode qui revoie un tableau 2D mais apparement il y a un problème lors du remplissage du tableau :(
Le compilateur indique ceci après compilation :
no match for 'operator=' in 'tab[i][j] = (&t)->std::vector<_Tp, _Alloc>::operator[] [with _Tp = int, _Alloc = std::allocator<int>](((unsigned int)j))'
conversion from `monTab2D (*)[4]' to non-scalar type `monTab2D' requested
Merci pour votre aideCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include <vector> #include <string> struct monTab2D { int tab[3][4]; }; monTab2D vectToTab(vector<string> v){ monTab2D tab[3][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0}}; for(int i = 0;i<3; i++){ vector<int>t = sCodeToTabNum(v[i]); for(int j = 0;j<3; j++){ tab[i][j]= t[j]; } } return tab; }
essaye ça :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <vector> #include <string> using namespace std; struct monTab2D { int tab[3][4]; }; monTab2D vectToTab(vector<string> v){ monTab2D tab = {0}; // <= erreur ici for(int i = 0;i<3; i++){ vector<int>t = sCodeToTabNum(v[i]); for(int j = 0;j<3; j++){ tab.tab[i][j]= t[j]; // <== erreur ici } } return tab; }
Merci bien :)
Il y a un projet de boost qui pemmet de faire proprement ce genre d'initialisations statiques de containers.