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
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    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 exp�riment� Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    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 : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    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
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    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 Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    D�tails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    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
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    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