web-dev-qa-db-fra.com

Valeurs de tableau 2D C ++

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.

34
Kingkong Jnr

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.

53
Cheers and hth. - Alf

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!

9
templatetypedef

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;
}
8
pmg

int iArray[2][2] = {{1, 2}, {3, 4}};

Pensez à un tableau 2D comme à un tableau de tableaux.

5
Avery3R

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.

0
Dima