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 :

Taille d'un vecteur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut Taille d'un vecteur
    Bonsoir,
    j'ai cherché partout ca n'a pas résolu mon problème : pour enlever un élément, le vecteur devrait réduire sa taille d'une unité.
    J'ai beau faire un resize il garde toujours la même taille et même avec un pop_back(), un erase etc...
    Comment retirer définitivement un élèment du vecteur et réduire sa taille consécutivement ?

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

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Les opérations que tu cites réajustent bien la taille du vecteur. Si c'est de la mémoire allouée dont tu parles, il y a une astuce pour ajuster celle-ci, mais en général garder la mémoire allouée est une meilleure stratégie.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    J'ai essayé d'opter pour la solution de la faq c'est à dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <string>
    #include <vector>
    #include <algorithm>
     
     
    std::vector v;
    v.erase(std::remove_if(v.begin(), v.end(), std::bind2nd(std::greater<int>(), 3)), v.end());
    Mais j'ai un problème et je sais même pas si cette solution marchera mais dans algo.h : erreur à chaque condition : if (!__prec(*__first)) car appel d'une non fonction
    Est-ce la solution ?

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si tu commençais par nous dire ce que tu cherches à faire, exactement ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    C'est tout simple !
    Juste supprimer une instance dans le vecteur et reajuster la taille (size() du vecteur

    Ca donne ceci :
    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
     
    class CItem
    {
    public:
              CItem() {}
              // Variables etc...
    };
    class CClient
    {
    public:
              CClient() {}
              void Supprimer(int n);
              std::vector < CItem > Courses;
              // variables etc...
    };
    ///////////////////////////////////////////
    void CClient::Supprimer(int n)
    {
              // Enlever un CItem PRECIS (article)
              this->Courses.erase(this->Courses[n]);
     
              // Echange du dernier élément avec l'élément n ( cela causera 
              // peut etre problème étant donné qu'on a déjà effacé l'élément n
     
              CItem *pItem = this->Courses.end();
              this->Courses[n] = pItem;
     
              // pour réajuster le vecteur
              this->Courses.pop_back();      
    }
    Bien entendu ca ne marche pas
    J'espère que vous avez compris ce que je voulais tout simplement faire

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

Discussions similaires

  1. Réduire la taille d'un vecteur de très grande dimension
    Par camboui dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 07/06/2017, 13h23
  2. [Débutant] Avoir la Taille d'un Vecteur
    Par kheira dans le forum C++Builder
    Réponses: 6
    Dernier message: 14/03/2010, 18h26
  3. Problème de changement de taille d'un vecteur
    Par arfi64 dans le forum MATLAB
    Réponses: 1
    Dernier message: 05/06/2007, 14h56
  4. Réponses: 5
    Dernier message: 14/06/2006, 15h05
  5. Réponses: 5
    Dernier message: 30/01/2006, 12h10

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