Je voulais déclarer un tableau 2D et lui attribuer des valeurs, sans exécuter de boucle for.
Je pensais pouvoir utiliser l'idée suivante
int array[5] = {1,2,3,4,5};
Ce qui fonctionne bien pour initialiser le tableau 2D également. Mais apparemment, mon compilateur n'aime pas ça.
/*
1 8 12 20 25
5 9 13 24 26
*/
#include <iostream.h>
int main()
{
int arr[2][5] = {0}; // This actually initializes everything to 0.
arr [1] [] = {1,8,12,20,25}; // Line 11
arr [2] [] = {5,9,13,24,26};
return 0;
}
J:\CPP\Grid> bcc32.exe Grid.cpp
Borland C++ 5.5.1 pour Win32 Copyright (c) 1993, 2000 Borland
Grid.cpp:
Erreur E2188 Grid.cpp 11: Syntaxe d'expression dans la fonction main ()
Erreur E2188 Grid.cpp 12: Syntaxe d'expression dans la fonction main ()
Avertissement W8004 Grid.cpp 14: 'arr' reçoit une valeur qui n'est jamais utilisée dans funct ion main ()
* 2 erreurs dans Compile *
S'il vous plaît aider à savoir quelle est la bonne façon d'initialiser le tableau 2D avec mon ensemble de valeurs.
Comme ça:
int main()
{
int arr[2][5] =
{
{1,8,12,20,25},
{5,9,13,24,26}
};
}
Cela devrait être couvert par votre manuel C++: lequel utilisez-vous?
Quoi qu'il en soit, mieux, envisagez d'utiliser std::vector
ou une classe de matrice toute prête, par ex. de Boost.
La bonne façon d’initialiser un tableau multidimensionnel en C ou C++ est
int arr[2][5] = {{1,8,12,20,25}, {5,9,13,24,26}};
Vous pouvez utiliser cette même astuce pour initialiser des tableaux de dimensions supérieures, si vous le souhaitez.
Aussi, soyez prudent dans votre code initial - vous essayiez d'utiliser des décalages à 1 index dans le tableau pour l'initialiser. Cela ne compilait pas, mais si c'était le cas, cela poserait des problèmes car les tableaux C sont indexés sur 0!
Je veux juste souligner que vous n'avez pas besoin de spécifier toutes les dimensions du tableau.
La dimension la plus à gauche peut être "devinée" par le compilateur.
#include <stdio.h>
int main(void) {
int arr[][5] = {{1,2,3,4,5}, {5,6,7,8,9}, {6,5,4,3,2}};
printf("sizeof arr is %d bytes\n", (int)sizeof arr);
printf("number of elements: %d\n", (int)(sizeof arr/sizeof arr[0]));
return 0;
}
int iArray[2][2] = {{1, 2}, {3, 4}};
Pensez à un tableau 2D comme à un tableau de tableaux.
Une alternative consiste à représenter votre tableau 2D sous la forme d'un tableau 1D. Cela peut rendre les opérations élémentaires plus efficaces. Vous devriez probablement envelopper dans une classe qui contiendrait également la largeur et la hauteur.
Une autre alternative consiste à représenter un tableau 2D sous la forme d'un std::vector<std::vector<int> >
. Cela vous permettra d'utiliser les algorithmes de STL pour l'arithmétique sur les tableaux, et le vecteur s'occupera également de la gestion de la mémoire pour vous.