Si votre projet est CLI (Common Language Runtime Support) , alors:
Vous pouvez utiliser la classe tableau, pas celle que vous obtenez lorsque vous écrivez:
#include <array>
using namespace std;
En d'autres termes, pas la classe de tableau non managée que vous obtenez lorsque vous utilisez l'espace de noms std et lorsque vous incluez l'en-tête de tableau, pas la classe de tableau non managée définie dans l'espace de noms std et dans l'en-tête de tableau, mais le tableau de classes gérées de la CLI.
avec cette classe, vous pouvez créer un tableau de n'importe quel rang .
Le code suivant ci-dessous crée un nouveau tableau bidimensionnel de 2 lignes et 3 colonnes et de type int, et je le nomme "arr":
array<int, 2>^ arr = gcnew array<int, 2>(2, 3);
Vous pouvez maintenant accéder aux éléments du tableau, par son nom et écrire une seule parenthèse au carré []
, et à l'intérieur, ajouter la ligne et la colonne et les séparer avec la virgule ,
.
Le code suivant ci-dessous accède à un élément dans la 2ème ligne et la 1ère colonne du tableau que j'ai déjà créé dans le code précédent ci-dessus:
arr[0, 1]
écrire seulement cette ligne, c'est lire la valeur dans cette cellule, c'est-à-dire obtenir la valeur dans cette cellule, mais si vous ajoutez l'égalité =
signe , vous êtes sur le point d'écrire la valeur dans cette cellule, c'est-à-dire de définir la valeur dans cette cellule. Vous pouvez également utiliser les opérateurs + =, - =, * = et / = bien sûr, uniquement pour les nombres (int, float, double, __int16, __int32, __int64 et etc.), mais vous le savez déjà.
Si votre projet n'est pas CLI, vous pouvez utiliser la classe de tableau non managée de l'espace de noms std, si vous #include <array>
, bien sûr, mais le problème est que cette classe de tableau est différente de celle du tableau CLI. La création d'un tableau de ce type est identique à l'interface CLI, sauf que vous devrez supprimer le ^
signe et le gcnew
mot - clé. Mais malheureusement, le deuxième paramètre int <>
entre parenthèses spécifie la longueur (c'est-à-dire la taille) du tableau, pas son rang!
Il n'y a aucun moyen de spécifier le rang dans ce type de tableau, le rang est uniquement la fonction du tableau CLI . .
Le tableau std se comporte comme un tableau normal en c ++, que vous définissez avec un pointeur, par exemple int*
, puis:, new int[size]
ou sans pointeur:, int arr[size]
mais contrairement au tableau normal du c ++, le tableau std fournit des fonctions que vous pouvez utiliser avec les éléments du tableau, comme fill, begin, end, size et etc, mais un tableau normal ne fournit rien .
Mais les tableaux std sont toujours un tableau unidimensionnel, comme les tableaux c ++ normaux. Mais grâce aux solutions que les autres gars suggèrent sur la façon dont vous pouvez faire le tableau unidimensionnel c ++ normal à un tableau bidimensionnel, nous pouvons adapter les mêmes idées au tableau std, par exemple selon l'idée de Mehrdad Afshari, nous pouvons écrire le code suivant:
array<array<int, 3>, 2> array2d = array<array<int, 3>, 2>();
Cette ligne de code crée un "tableau jugged" , qui est un tableau unidimensionnel que chacune de ses cellules est ou pointe vers un autre tableau unidimensionnel.
Si tous les tableaux unidimensionnels dans un tableau unidimensionnel sont égaux dans leur longueur / taille, alors vous pouvez traiter la variable array2d comme un véritable tableau bidimensionnel, et vous pouvez utiliser les méthodes spéciales pour traiter les lignes ou les colonnes, selon la façon dont vous le voyez à l'esprit, dans le tableau 2D, que le tableau std prend en charge.
Vous pouvez également utiliser la solution de Kevin Loney:
int *ary = new int[sizeX*sizeY];
// ary[i][j] is then rewritten as
ary[i*sizeY+j]
mais si vous utilisez un tableau std, le code doit être différent:
array<int, sizeX*sizeY> ary = array<int, sizeX*sizeY>();
ary.at(i*sizeY+j);
Et ont toujours les fonctions uniques du tableau std.
Notez que vous pouvez toujours accéder aux éléments du tableau std à l'aide des []
parenthèses, et vous n'avez pas besoin d'appeler la at
fonction. Vous pouvez également définir et affecter une nouvelle variable int qui calculera et conservera le nombre total d'éléments dans le tableau std, et utilisera sa valeur, au lieu de répétersizeX*sizeY
Vous pouvez définir votre propre classe générique de tableau bidimensionnel et définir le constructeur de la classe de tableau bidimensionnel pour recevoir deux entiers afin de spécifier le nombre de lignes et de colonnes dans le nouveau tableau bidimensionnel, et définir la fonction get qui reçoit deux paramètres d'entier qui accèdent à un élément dans le tableau bidimensionnel et renvoie sa valeur, et définissent la fonction qui reçoit trois paramètres, que les deux premiers sont des entiers qui spécifient la ligne et la colonne dans le tableau bidimensionnel, et le troisième paramètre est la nouvelle valeur du élément. Son type dépend du type que vous avez choisi dans la classe générique.
Vous pourrez implémenter tout cela en utilisant soit le tableau c ++ normal (pointeurs ou sans) ou le tableau std et utiliser l'une des idées suggérées par d'autres personnes, et le rendre facile à utiliser comme le tableau cli, ou comme les deux tableau dimensionnel que vous pouvez définir, affecter et utiliser en C #.