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 :

Définir la taille max d'un vector c'est possible?


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Définir la taille max d'un vector c'est possible?
    Salut,

    j'ai un vector et j'aimerais lui donner une taille maximum (ex: pas plus de 25 éléments). Vous allez me dire qu'il faut que j'utilise un tableau mais je ne connais pas à l'avance la taille que va avoir le vector et un tableau doit être normalement initialisé dés sa création.

    voila une idée ?

    A+

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Je ne suis pas certain de comprendre : Que veux-tu faire si jamais tu essayes d'ajouter un 26e élément dans ton vecteur ?

    Boucler et écraser le premier ?
    Planter ?
    Lever une exception ?
    Ignorer silencieusement l'ajout ?
    Tout décaler d'un cran et perdre le premier ?
    Autre chose ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Soi tu te fais un allocateur que tu files au vecteur, soit tu fais une classe qui encapsule std::vector.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 291
    Points : 434
    Points
    434
    Par défaut
    Un truc comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    std::vector<type> v;
    /*
    CODE
    */
    for( int i=0; i<25;++i)
         v.push_back(0);

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Dans ce cas là, autant faire un reserve(). Mais toujours est-il que cela ne conviendra pas au PO qui voulait un truc du genre que le push_back échoue si la taille du vecteur avait atteint une certaine valeur (du moins, je l'avais compris comme ça).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Est ce que std::array de C++11 pourrait convenir ?
    http://www.cplusplus.com/reference/stl/array/

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    std::array est plus un tableau de taille fixe qu'un tableau de taille maximale.

    Sans plus d'information de la part du posteur initial, il va être difficile de l'aider...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    std::array est plus un tableau de taille fixe qu'un tableau de taille maximale.

    Sans plus d'information de la part du posteur initial, il va être difficile de l'aider...
    Ok, mais en gros y a que 2 possibilités non ? Soit std::array si la taille est fixe dès qu'elle est connue, soit la solution d'oodini ; une classe générique qui encapsule un vector, mais là faut gérer à la main tous les ajouts et suppressions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    template<typename T, std::size_t max_size>
    class max_array
    {
        std::vector<T> values_;
     
    public:
        // En avant Guingamp...
    };
    EDIT :
    Citation Envoyé par JolyLoic Voir le message
    Boucler et écraser le premier ?
    Planter ?
    Lever une exception ?
    Ignorer silencieusement l'ajout ?
    Tout décaler d'un cran et perdre le premier ?
    Autre chose ?
    Quel que soit le choix, je pense que la 2ème solution est à préconiser. A moins qu'on puisse se débrouiller avec les allocateurs (mais je trouve ça un peu obscur...) ?

Discussions similaires

  1. static std::<vector> c'est possible?
    Par Krishna dans le forum C++
    Réponses: 6
    Dernier message: 03/06/2008, 11h40
  2. [Impression] Définir la taille du papier
    Par HPJ dans le forum Windows
    Réponses: 7
    Dernier message: 06/09/2004, 15h43
  3. [JTextFiled]Mettre une taille max à la saisie
    Par mush_H dans le forum Composants
    Réponses: 13
    Dernier message: 29/07/2004, 11h22
  4. Taille Max que peux gerer un serveur SQL
    Par Youssef dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2004, 11h52
  5. taille max du nom d'un champ
    Par hna dans le forum Paradox
    Réponses: 2
    Dernier message: 28/07/2002, 02h40

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