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 :

Fonction de création de nom unique pour un vector


Sujet :

C++

  1. #1
    Futur Membre du Club Avatar de IlGi256
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2020
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Fonction de création de nom unique pour un vector
    Bonjour,
    Je souhaiterai créer une fonction afin de générer des noms uniques de vector persistent.
    Ces vectors seront éffacés via une autre fonction.
    Chaque appel de la fonction doit créer un nom unique de vector.
    Cet appel doit pas être écrasé par l'appel suivant.

    Exemple :
    Appel 1 :
    + Création d'un vector Liste_0 et de son contenu
    Appel 2 :
    + Création d'un vector Liste_1 et de son contenu
    Appel ... :

    Le problème c'est que le nom des variables en C++ est statique et que chaque variable doit être déclarée avec un nom défini d'avance.

    Peut-on crééer une fonction génératrice de nom unique aux vector C++ ?
    Sur d'autres languages cela se fait !

    Sur la base d'un code d'exemple ci dessous, j'ai ténté sur un autre code, de créeer un nom unique via une macro pour un vector.
    J'ai bien le vector sans erreur, mais je n'arrive pas à exploiter.

    Code vector persistent classique
    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
     
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <utility>
     
    using std::cout;
    using std::end;
    using std::string;
    using std::atoi;
    using std::to_string;
    using std::vector;
    using std::pair;
    using std::make_pair;
    using std::sort;
     
    int main(){
     
         int64_t I64_V1D_Taille{};
     
         static vector<int64_t>Liste{};
     
         I64_V1D_Taille = Liste.size();
     
         cout << I64_V1D_Taille << end;
     
         Liste.clear();
     
    }
    Tentative de création d'un nom unique avec une macro

    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
    34
     
     
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <utility>
     
    using std::cout;
    using std::end;
    using std::string;
    using std::atoi;
    using std::to_string;
    using std::vector;
    using std::pair;
    using std::make_pair;
    using std::sort;
     
    #define CONCAT(a, b) CONCAT_INNER(a, b)
    #define CONCAT_INNER(a, b) a ## b
     
    #define UNIQUE_NAME(base) CONCAT(base, __COUNTER__)
     
    int main(){
     
         int64_t I64_V1D_Taille{};
     
         static vector<int64_t>UNIQUE_NAME(Liste){};//fonctionne
     
         /*I64_V1D_Taille = UNIQUE_NAME(Liste).size(); //error C2065: 'Liste3': undeclared identifier*/
     
         //cout << I64_V1D_Taille << end;
     
    }

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Tu ne peux pas créer des noms dynamiquement. D'ailleurs, comment pourrais-tu t'en servir dans du code sans les connaitre à l'avance ?

    Tu pourrais nous expliquer pourquoi tu veux faire ça ? On pourra t'aider à trouver une autre solution.

  3. #3
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Oui, que cherches tu à faire?

    Le code que tu as trouvé, génère bien des noms uniques. C'est une utilisation "extrême" des macros. Mais ils sont tellement uniques qu'on ne peut citer les noms qu'une fois!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static vector<int64_t> UNIQUE_NAME(Liste){};  // définit Liste1
    static vector<int64_t> UNIQUE_NAME(Liste){};  // définit Liste2
    static vector<int64_t> UNIQUE_NAME(Liste){};  // définit Liste3, on a créé 3 variables différentes.
     
    I64_V1D_Taille = UNIQUE_NAME(Liste).size();   // erreur, Liste4 n'existe pas!!

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Si le "nom", c'est pour distinguer une "Liste" d'une autre, leur adresse devraient largement suffire.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Si le "nom", c'est pour distinguer une "Liste" d'une autre, leur adresse devraient largement suffire.
    Comment prends-tu l'adresse de ton vecteur à la définition ?

  6. #6
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Salut tour le monde,

    Un vecteur de vecteur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    vector<vector<int>> v;
    {
        vector<int> tmp {1,2,3};
        v.push_back(tmp);
    }
    cout<< v.size()<< '\n';
    cout<< v.at(0).size(); // ou v[0].size() quand opportun

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Ça sent le mytho problème de vouloir créer des trucs et vouloir les distinguer par leur nom quand la solution serait d'utiliser une std::map<std::string, std::vector<int64_t>>
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Comme toi, j'ai pensé direct au std::map mais si c'est pour appeler les vecteurs unique_nom_1, unique_nom_2... et l'absence d'un besoin clairement défini je lui ai préféré le std::vector qui colle mieux aux intentions des codes présentés.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    1 vecteur ou 1 map ne change rien sans explication c'est impossible, le développeur ne peut pas manipuler 1 tableau qui sera connu à la compilation
    Et comme je le disais avant, on ne peut pas récupérer l'adresse du tableau à la définition

    Qu'on stocke 1 nom ou 1 indice, on n'a pas le lien entre son tableau et cet élément (... à moins de toujours utiliser le dernier avec 1 variable [globale/ statique/ ...])
    Sinon éventuellement , coder 1 classe qui gère la collection de tableaux, et qui te retourne 1 index/ 1 nom que tu stockes, pour ensuite l'utiliser ... 1 truc ultra classique.

    À moins que quelqu'un propose 1 solution

  10. #10
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Citation Envoyé par foetus Voir le message
    Sinon éventuellement , coder 1 classe qui gère la collection de tableaux, et qui te retourne 1 index/ 1 nom que tu stockes, pour ensuite l'utiliser ... 1 truc ultra classique.
    Je comprends pas pourquoi tu compliques les choses, tu as l'embarras du choix en containers dans la STL.

    Voilà ce que demande le 'posteur' original

    Citation Envoyé par IlGi256 Voir le message
    Je souhaiterai créer une fonction afin de générer des noms uniques de vector persistent.
    Ces vectors seront éffacés via une autre fonction.
    Chaque appel de la fonction doit créer un nom unique de vector.
    Cet appel doit pas être écrasé par l'appel suivant.

    Exemple :
    Appel 1 :
    + Création d'un vector Liste_0 et de son contenu
    Appel 2 :
    + Création d'un vector Liste_1 et de son contenu
    Appel ... :
    et voici ce que j'avais proposé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    vector<vector<int64_t>> list;
    list.push_back(appel_fonction_qui_retourne_un_vecteur());
    list.push_back(appel_fonction_qui_retourne_un_vecteur());
    //...
    cout<< list.size()<< '\n';
    cout<< list[0].size()<< '\n';
    list[0].clear();
    cout<< list[1].size()<< '\n';
    //...
    Là, il me semble que tout y est.

    Après, le reste de son message c'est le problème Y de la solution qu'il a imaginé pour résoudre X, c'est tout.

Discussions similaires

  1. [PowerShell] fonction de création des Add-ons pour ISE
    Par I'm_HERE dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 04/05/2011, 22h13
  2. creer une fonction unique pour checkbox
    Par under dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/12/2009, 15h58
  3. [MooTools] Insertion fonction qui affiche le nom de l'image pour une galelrie photo :)
    Par bugordi dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 10/06/2009, 13h47
  4. Fonction UNIQUE pour cell
    Par hidies dans le forum MATLAB
    Réponses: 3
    Dernier message: 26/04/2007, 14h11
  5. [FLASH MX] nom variable pour une fonction
    Par totoche dans le forum Flash
    Réponses: 2
    Dernier message: 20/12/2005, 14h00

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