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

Discussion :

Traitement des QVector

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2011
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 221
    Par défaut Traitement des QVector
    Bonjour,
    J'ai un vecteur "posi" défini comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    //----------------------------------------------------------------------------------------------------------------------
    // Vehicule.h: interface de la classe vehicule
    //----------------------------------------------------------------------------------------------------------------------
     
    #ifndef VEHICULE_H
    #define VEHICULE_H
    #include <QVector>
     
    class Troncon;
    class Origine;
    class Destination;
    class Vehicule
    {
    public:
        Vehicule();
        virtual ~Vehicule();
     
    public:
     
        QVector<double>                  *posi;             //position du vehicule sur le troncon
    public:
     
        void                              SetPosition(double x);
    double                            GetPosition(int t);
    .
    .
    .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    //----------------------------------------------------------------------------------------------------------------------
    // vehicule.cpp: implementation de la classe vehicule
    //----------------------------------------------------------------------------------------------------------------------
    #include <stdio.h>
    #include <iostream>
    #include "Vehicule.h"
     
    using namespace std;
     
    //----------------------------------------------------------------------------------------------------------------------
    // Construction/Destruction
     
    Vehicule::Vehicule()
    {
        posi = new QVector<double> ();          //position du vehicule sur le troncon (abscisse relative)
    .
    .
    }
    Vehicule::~Vehicule()
    {
        delete posi;
        .
    ...
    }
    void Vehicule::SetPosition(double x)
    {
        posi->append(x);
    }
    double Vehicule::GetPosition(int t)
    {
        return posi->at(t);
    }
    Au niveau de mon algorithme dans "main.cpp", j'ai besoin de mettre une valeur dans mon vecteur "posi" mais à "t-2" et non pas à "t" !
    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    suiveur->SetVitesse(v_suiveur2);
    Et Bien considère "v_suiveur2" comme une valeur mise à "t", alors que moi je veux la mettre à "t-2"
    Il n' y a pas une méthode existante dans QT qui fait ça directement ?

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Pourquoi te compliquer la vie en utilisant un pointeur ? QVector<double> osi; suffit amplement.

    Sinon tu as créé une fonction SetPosition() qui ne fait pas vraiment ce quelle dit, je l'aurait plutôt appelée AddPosition(), ou AppendPosition().
    Et justement pour ce dont tu as besoin, SetPositionAt de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void SetPositionAt(std::size_t position, double value)
    serait toute indiquée.

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2011
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 221
    Par défaut
    Bonsoir,
    void SetPositionAt(std::size_t position, double value)
    std::size_t position
    Représentera l'argument Temps "int t" ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    std::size_t est non signé, mais oui cela représentera ton temps "t".

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2011
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 221
    Par défaut
    Bonjour,
    Au niveau de mon ".cpp" je fais "append" et "at" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void Vehicule::SetPositionAt(int t,double x)
    {
        posi->append(x)->at(t);
    }
    Pour "append" c'est ok, mais pour "at" il ne me donne pas la main
    Pourquoi ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    En ce qui concerne le pointeur inutile, je vois que mes conseils sont toujours aussi bien suivis...

    Sinon, il n'y a qu'à voir la doc de QVector::append
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void QVector::append(const T & value)
    Le retour est de type void, soit pas de retour.
    Il faut bien comprendre que append() va rajouter un élément à la fin de notre QVector. Et at() de façon totalement indépendante, et dans un appel séparé n'yant rien à voir, va juste retourner l'élément déjà existant du QVector à la position demandée.
    Tu ne peux pas juste combiner les deux ainsi et espérer obtenir ce que tu souhaites.

    Il faut réfléchir un peu à ce que tu fais :
    • Qu'est-ce que tu as au départ de cette fonction ?
      Un vecteur de doubles, d'une certaine taille (que tu peux obtenir avec la méthode size()).
    • Que veux-tu faire précisément ?
      Positionner une valeur x à un certain endroit que tu détermines : t

    De là on est en droit de se poser plusieurs questions :
    • Cet endroit existe t-il déjà ? Autrement dit est-ce que t est inférieur strict à la taille de notre QVector ?
      • Si oui on va remplacer la valeur présente à cet endroit par le paramètre x
      • Si non, que fait-on ? Au moins deux choix peuvent être envisagés :
        • On lance une exception, pour renseigner l'appelant que cette opération est impossible.
        • On accepte l'opération, il faudra alors agrandir notre QVector avec le nombre d'éléments nécessaires, en initialisant les éléments "intermédiaires" à une certaine valeur.

    C'est ton projet, à toi de voir la stratégie à adopter

Discussions similaires

  1. [VB.Net] Traitement des résultats d'une requète
    Par Catalan dans le forum ASP.NET
    Réponses: 23
    Dernier message: 05/10/2005, 17h29
  2. Traitement des dates différent suivant le serveur
    Par le lynx dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/09/2005, 11h14
  3. Réponses: 1
    Dernier message: 24/07/2005, 22h25
  4. Traitement des champs memo par DBGrid
    Par Sydaze dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/04/2005, 09h24
  5. traitement des caractères spéciaux avec XSLT
    Par Mirgue dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 19/07/2004, 16h57

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