IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Tableaux à plusieurs dimensions


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Points : 379
    Points
    379
    Par défaut Tableaux à plusieurs dimensions
    Bonjour,

    Petite question concernant les tableaux à plusieurs dimensions: est-ce que les écritures suivantes sont équivalentes?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int tab[size];
    for(int i = 0; i < size; i++)
    tab[size] = ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int tab[n][m];
    for(int i = 0; i < n; i++)
    for(int j = 0; j < m; j++)
    tab[i][j] = ...
    Avec size = n*m. Je pense que le compilateur remplace les tableaux [n][m] par des tableaux [n*m], et les appels [i][j] par des [i*m+j]. Donc performances exactement les même?

    Je me demande ça dans l'optique d'utiliser un std::vector comme tableau d'objets à deux dimensions, plutôt qu'un std::vector<std::vector> ou qu'utiliser boost. Votre avis?

  2. #2
    Membre confirmé

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Points : 527
    Points
    527
    Par défaut
    Sujet traité régulièrement. , , là encore...

    Si la question (y en a-t-il vraiment une?) concerne la performance, elle a surement une réponse (en l'occurrence oui les deux versions seront très probablement identiques après optimisation). Par contre, je ne pense pas que ce principe se retrouve si on utilise std::vector au lien de T** ou T[][]. Les itérateurs, en particulier, devront utiliser un système de "strides" à la boost... Ca ne me parait pas optimisable par un compilateur.
    Je ne vois pas pourquoi ne pas utiliser Boost.MultiArray, qui fait déjà tout le travail que std::vector laisse en plan.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Points : 379
    Points
    379
    Par défaut
    Oui c'est bien une question de performances. Je ne dois pas faire de traitement sur des lignes ou des colonnes, mais juste pouvoir accéder à un élément [i][j] en O(1), et ensuite pouvoir faire un traitement avec les cases voisines (i-1,j; i,j-1; i+1,j; i,j+1), donc pouvoir accéder aux cases voisine également en O(1).

    Donc je peux le faire facilement avec un tableau à deux dimensions, mais si ça revient exactement au même je préfère utiliser une seule dimension. Et tant qu'à faire autant utiliser un std::vector vu que les perfs devraient être identiques.

Discussions similaires

  1. Tableaux plusieurs dimensions
    Par Tiolebucheron dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/04/2010, 21h03
  2. [PHP 5.0] Tableaux à plusieurs dimensions
    Par Nemesis007 dans le forum Langage
    Réponses: 6
    Dernier message: 10/12/2009, 17h55
  3. Tableaux à plusieurs dimensions
    Par hallaj dans le forum Langage
    Réponses: 2
    Dernier message: 28/06/2008, 14h00
  4. Tableaux à plusieurs dimensions
    Par Diabolik dans le forum Assembleur
    Réponses: 3
    Dernier message: 08/12/2003, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo