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 :

Concaténation d'un grand ensemble de String


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Points : 38
    Points
    38
    Par défaut Concaténation d'un grand ensemble de String
    Bonjour,

    Je travaille actuellement avec un tableau contenant entre 100 et 200 strings et je me demandais comment on pouvait faire pour concaténer tout cela assez rapidement. Une fonction en python permet de le faire, mais je ne la retrouve pas en C++. Tout ce que j'ai trouvé actuellement est strcat, mais ça ne me semble pas super approrié (j'ai peur que ça prenne trop de temps à cause des allocations dynamique). Quelqu'un saurait-il m'aider svp ?

    Merci !!

  2. #2
    Membre averti Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Points : 323
    Points
    323
    Par défaut
    Bonjour,
    Quel conteneur utilisez vous pour faire le tableau et les chaines de caractère?

    Une simple addition de toute les chaines dans un std::string ne suffit t'il pas, niveau rapidité?

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Je pense qu'il suffit d'allouer une chaine (une std::string hein ^^), de la mettre à la bonne taille avant toute opération (avec reserve) et ensuite de copier.

    strcat est une fonction C, oublie la.

    Edit:
    Une simple addition de toute les chaines dans un std::string ne suffit t'il pas, niveau rapidité?
    Sans précaution particulière (mettre un bon ordre de grandeur de capacité la au début), il y aura de multiple allocation/désallocation/copie pour rien.

    Mais bon, de toute façon, 200 std::string, c'est pas grand chose.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    J'utilise un type particulier (dont je ne suis pas le développeur) et qui possède une fonction c_str permettant de retourner une string. L'addition est bien mon dernier recours, mais je pense alors à recréer une fonction qui utiliserait des pointeurs car la gestion dynamique des Strings prend quand même un certain temps que j'aimerais éviter ^^

  5. #5
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Edit : trois réponses pendant que je tapais la mienne, je suis vraiment trop lent

    Bonjour,

    Citation Envoyé par Shadew
    Je travaille actuellement avec un tableau contenant entre 100 et 200 strings et je me demandais comment on pouvait faire pour concaténer tout cela assez rapidement.
    Il n'y a pas de fonction "join" toute faite en C++, mais c'est très facile de s'en faire une :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    std::vector<string> tab; // ton tableau de 200 strings
    std::string concat;
    for(int i = 0 ; i < tab.size(); i++)
    {
       concat+= tab[i];
    }
    Citation Envoyé par Shadew
    Tout ce que j'ai trouvé actuellement est strcat, mais ça ne me semble pas super approrié (j'ai peur que ça prenne trop de temps à cause des allocations dynamique). Quelqu'un saurait-il m'aider svp ?
    Oulaa, du calme, un tableau de 200, 500 ou 1000 string avec les machines d'aujourd'hui, c'est rien. Essaye d'abord la manière naïve et si c'est trop lent, profile pour trouver le problème.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    Kikoo,

    Merci pour vos réponses, je vais tester ça maintenant et voir les performances. Je travaille sur de l'optimisation de code pour des programmes qui sont censés tourner plusieures heures. Dans ces cas-là, ne fut-ce que le gain d'une seconde sur une opération souvent répétée permet au final un gain non négligeable :-)

Discussions similaires

  1. Concaténer deux vectors de vector<vector<string>>
    Par maud4274 dans le forum Langage
    Réponses: 21
    Dernier message: 08/08/2014, 09h03
  2. Stockage d'une grande quantité de String
    Par Sofute dans le forum Android
    Réponses: 20
    Dernier message: 08/01/2014, 15h12
  3. plus grand ensemble (propriété non transitive)
    Par destroyer-duck dans le forum Mathématiques
    Réponses: 6
    Dernier message: 06/01/2013, 19h55
  4. lister un ensemble de String et supprimer les doublons
    Par L4BiN dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 19/12/2007, 12h40
  5. [VB 6] plus grand qu'un string ?
    Par coco21 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 12/06/2006, 12h30

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