Multidimensionnelle de taille variable tableau en C++
salut, je veux faire quelque chose comme ceci:
int op(string s1, string s2){
int x = s1.size();
int y = s2.size();
int matrix = new int[x][y]
/* do stuff with matrix */
}
Pour une raison que j'obtiens les erreurs suivantes:
SuperString.cpp(69) : error C2540: non-constant expression as array bound
SuperString.cpp(69) : error C2440: 'initializing' : cannot convert from 'int (*)[1]' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
SuperString.cpp(71) : error C2109: subscript requires array or pointer type
Merci!
Il vient probablement de C# où est ce qu'il fait est légal 🙂
Il existe déjà de nombreuses questions à ce sujet à partir d'un certain nombre de différents angles (à noter que certains seront marqués [c] parce que le c++ obtient son tableau de comportement à partir de c).
Quelques liens: stackoverflow.com/questions/365782/... et stackoverflow.com/questions/1285457/2d-arrays-with-c et ...
Créer une Matrice clas, voir parashift.com/c++-faq-lite/opérateur-la surcharge.html#faq-13.10
Il existe déjà de nombreuses questions à ce sujet à partir d'un certain nombre de différents angles (à noter que certains seront marqués [c] parce que le c++ obtient son tableau de comportement à partir de c).
Quelques liens: stackoverflow.com/questions/365782/... et stackoverflow.com/questions/1285457/2d-arrays-with-c et ...
Créer une Matrice clas, voir parashift.com/c++-faq-lite/opérateur-la surcharge.html#faq-13.10
OriginalL'auteur SuperString | 2009-12-22
Vous devez vous connecter pour publier un commentaire.
Voici un résumé de comment construire un tableau 2d en C++ à l'aide de diverses techniques.
Statique 2D Matrice:
Dynamique Matrice 2d:
Matrice en utilisant std::vector:
Matrice 3d à l'aide de boost::multi_array (prises de boost multi_array docs):
Le std::vector exemple semble incorrect. Après la
Matrix matrix(N)
déclaration,matrix
a 25 lignes vides. Puis vous appuyez sur 25 plus les lignes non vides, et se termine avec 50 lignes.yep, vous êtes tout à fait correcte. J'ai édité la réponse, merci 🙂
OriginalL'auteur AraK
Vous devez déclarer la matrice var comme
int* matrix
, comme un tableau dynamique est déclaré comme un pointeur. Mais vous ne pouvez pas faire un tableau 2d dans une nouvelle avec les deux dimensions étant variable. Vous pouvez faire un tableau 1D et ne l'indexation de mathématiques sur votre propre.int* matrix = new int[x*y];
//Set element x1,y1 to 5
matrix[x1+y1*x] = 5;
C'est tableau 2d en question, et
int*
ne fonctionne pasLire attentivement la question.
un tableau est un pointeur" n'est pas correct. Tableau est un "tableau", il peut être converti en un type pointeur chaque fois que nécessaire, par exemple en passant d'un tableau à une fonction, tableau dans la fonction d'appel est converti en un type pointeur comme argument formel dans la fonction appelée.
ouais j'ai lu l'avertissement du compilateur et a raté la 2d partie quand j'ai répondu.
OriginalL'auteur Zanson
Utilisation boost::multi_array.
Voir le doc et cette question pour plus de détails.
Qui va vous aider à éviter beaucoup d'erreurs.
OriginalL'auteur Klaim
Si la taille de
matrix
n'a pas besoin de passer par la fonction, vous pouvez déclarer leint
s le stockage de lastring
longueurconst
. Cela vous permet de créer un tableau multidimensionnel dont la taille peut varier pour chaque appel de fonction, mais conserve une taille constante pendant toute la durée de la fonction.EDIT: Sur la lecture de l'une des autres réponses posté pendant que j'écrivais le mien, je suppose que vous devez utiliser
const size_t
au lieu deconst int
. Désolé, mon C++ est juste un peu rouillé.OriginalL'auteur Chinmay Kanchi
Vous ne pouvez pas avoir une matrice de non-constante de la taille de la ligne.
Vous pouvez choisir "tableau de pointeurs vers des tableaux" de la structure qui peut être indexé comme pp[a][b] tout comme une matrice. Vous ne pouvez pas allouer une telle structure avec un seul
new
. Vous aurez à construire manuellement dans un tampon.OriginalL'auteur Pavel Radzivilovsky
C'est plus un problème de syntaxe.
Dernière vérification dans gcc 4.4,
int matrix[x][y];
semble fonctionner comme prévu. Si votre tableau n'avez pas besoin de redimensionnement dans le milieu de la fonction. Vous pouvez essayer cette syntaxe et voir si cela fonctionne dans votre compilateur.OriginalL'auteur billyswong