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++Builder Discussion :

Remplissage de DynamicArray par vector


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut Remplissage de DynamicArray par vector
    Bonjour !

    J'ai un souci avec des tableaux de grande taille. Je cherche en effet à remplir un tableau (DynamicArray) par le contenu d'un vecteur. La solution simple(iste?) consiste à parcourir chaque élément du vecteur et à le copier dans le tableau. Seulement, quand on a un grand nombre d'éléments, ça prend du temps, et le temps.... bref

    Le but ici et d'afficher rapidement le contenu du tableau dans un TChart. Avant, j'utilisais la méthode Series->AddXY(x[i],y[i],x[i],clBlue) par exemple pour remplir le graph, mais c'est long. J'ai trouvé une méthode plus rapide qui consiste à donner directement le tableau des x et des y au graph, seulement ça prend un DynamicArray en entrée et donc je fais juste déplacer mon problème.

    Si quelqu'un avait une idée ??
    Merci beaucoup !!!!

  2. #2
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Une question que je me pose: dynamic array est-il un type ou simplement un tableau dynamique avec un espace oubilé ?

    dans le premier cas, je veut bien savoir ou est-ce que ça a été créé... dans le second cas, étant donné que la stl garantis que les éléments d'un vector sont stoqués de façons continue, tu peux, si tu ne veux pas vraiment recopier ton vecteur (mais c'est déconseillé) te contenter de faire pointer le tableau vers le premier élément du vector. Sinon, je ne sait pas s'il existe une methode pour recopier des blocs mémoire en entier, mais c'est aussi simple de balader un itérateur dessus.

    Cordialement

  3. #3
    Invité
    Invité(e)
    Par défaut
    Un DynamicArray c'est un type spécifique à Borland, qui émule un tableau Pascal.

    A mon avis, recopier le grand tableau C++ dans un dynamic array doit aller nettement plus vite que tout copier point à point avec AddXY (la raison étant que AddXY fait des tas de choses lors de chaque ajout de point, comme redessiner le graphique).

    Une autre méthode qui irait probablement assez vite consisterait à créer un TChartSeries indépendant, à le remplir avec ton tableau, et à le mettre d'un coup dans le TChart, avec une fonction comme AddSeries ou Assign. Normalement, ca doit aller plus vite.

    Maintenant, ca dépend quand même pas mal du nombre de points que tu veux afficher... Le composant TChart n'est pas vraiment fait pour afficher d'énormes quantités de données.

    Francois

  4. #4
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut
    Bonjour fcharton,

    Merci pour ta réponse, et merci d'avoir répondu à méphistopheles !!

    En effet, c'est du type DynamicArray spécifique à Borland dont je parlais.
    Et j'ai vu aussi que passer directement mon tableau à une Series était beaucoup plus rapide que d'allouer point par point avec AddXY. C'est exactement ce que je voulais faire, mais apparemment il n'y a pas de méthode simpliste pour recopier un vector... tant pis, je vais me contenter d'une boucle, et je vais essayer ton truc de boucler sur un tableau plutôt que de boucler sur AddXY !

    Merci à vous deux !

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Hello,

    Une idée pour recopier ton vecteur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DynamicArray<int> toto;
    toto.Length = 10;
     
    vector<int> titi;
    for (int i=0; i<10; i++)
      titi.push_back(i);
     
    CopyMemory(&toto[0], &titi[0], 10*sizeof(int));
     
    for (int i=0; i<10; i++)
      ShowMessage(IntToStr(toto[i]));

  6. #6
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut
    Hello,

    Merci totoche76, j'ai essayé un truc du style mais ça marchait plus ou moins bien et comme le dit méphistopheles, c'est plutôt déconseillé [].

    Je me suis contenté de boucler pour remplir le DynamicArray que je refourgue au TChart comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       Series1->XValues->Value =(TChartValues)(Xcopy); 
       Series1->XValues->Count = Taille;               
       Series1->XValues->Modified = true;           
       Series1->YValues->Value = (TChartValues)(Ycopy);
       Series1->YValues->Count = Taille;               
       Series1->YValues->Modified = true;
    Ça marche très bien et c'est moins long que je looper sur l'ajout de points au Chart.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplissage de Label par boucle
    Par Korleone dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/11/2009, 16h12
  2. [AC-2003] Remplissage champs texte par zone de liste déroulante
    Par VBchris dans le forum Access
    Réponses: 0
    Dernier message: 18/09/2009, 09h43
  3. Remplissage des formulaires par une application
    Par dot-_-net dans le forum Débuter
    Réponses: 4
    Dernier message: 15/07/2009, 23h46
  4. Remplissage de cellules par incrément à partir de la première vide
    Par benoit13 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/07/2008, 09h21
  5. remplissage de table par VB
    Par Davik dans le forum Access
    Réponses: 14
    Dernier message: 11/05/2006, 16h10

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