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

SL & STL C++ Discussion :

Transcription de code C++ en STL


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Par défaut Transcription de code C++ en STL
    Bonjour tout le monde,

    J'ai un ptit morceau de code en C++ assez classique, et je voulais savoir si certains d'entre vous saurez l'écrire en STL. Mon code fonctionne bien mais par curiosité et découverte je voudrais passer par la STL.

    Je dispose de deux vecteurs de taille identiques:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::vector<std::string>*	loc_po_results = Get_Vector();
    std::vector<size_t>               loc_o_sizes( loc_po_results->size());
    L'opération Get_Vector() renvoit un vecteur courant car mon code se fait dans une boucle de parcours de liste :
    while (iterateur_liste != iterateur_fin )
    {
    std::vector<std::string>* loc_po_results = Get_Vector();
    }

    Très bien, maintenant je fais l'opération suivante :
    Recopier dans le second vecteur la taille max de la chaine contenue dans le premier vecteur, sachant que le premier vecteur change donc a chaque tour de ma liste.

    Je fais donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    while ( loc_o_it_tmp != par_o_result_iterator_end )
    {
    	std::vector<std::string>*	loc_po_results = (*loc_o_it_tmp).second ; // Le second de l'iterateur est un vecteur dans une map : equivaut au Get_Vector();
     
    	for ( unsigned long loc_ul_i = 0U; loc_ul_i < loc_po_results->size() ; loc_ul_i++ )
    	{
    		loc_o_sizes[loc_ul_i] = std::max( loc_o_sizes[loc_ul_i], loc_po_results->at( loc_ul_i ).size() ) ;
    	}
    	++loc_o_it_tmp ;
    }
    Mais je voudrais savoir si il y a un moyen plus elegant de faire ca avec la STL, avec ... un transform, ou un copy ? Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::transform(   loc_po_result->begin(),
    			loc_po_result->end(),
    			loc_o_sizes.begin(),
    			std::bind2nd( max()....
    Sauf que dans mon cas deja la fonction max n'est pas un binary_function, et secondo je ne sais pas quoi mettre en second argument de mon bind2nd car il me faudrait l'element courant du vecteur loc_po_result, et non pas une constante comme on voit dans tous les exemples de la STL (bind2nd( greater<int>, 10 )......).

    Merci pour votre aide, j'espère que cela est possible en STL, sinon tant pis.
    A plus.
    Alex.

  2. #2
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Le mieux serait de réécrire replace_if pour qu'il accepte un foncteur avec deux iterateurs en entrée.

    Il y a peut-être des solutions du côté de Boost.

    Sinon je trouve ton code pas trop sale.

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Bonjour,
    pour cette partie de ton code
    Citation Envoyé par Muetdhiver Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    std::vector<std::string>*	loc_po_results = (*loc_o_it_tmp).second ; // Le second de l'iterateur est un vecteur dans une map : equivaut au Get_Vector();
     
    	for ( unsigned long loc_ul_i = 0U; loc_ul_i < loc_po_results->size() ; loc_ul_i++ )
    	{
    		loc_o_sizes[loc_ul_i] = std::max( loc_o_sizes[loc_ul_i], loc_po_results->at( loc_ul_i ).size() ) ;
    }
    je le traduirait par
    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
    //foncteur qui donne le max entre un int et la taille d'une string
    //tu doit pouvoir remplacer int pas size_type ou un truc comme cela
    int MaxSize(const int & currentSize, const std::string & s)
    {
    int s_Size =s.size();
    return (s_Size>currentSize) ? s_Size : currentSize;
    }
    .
    .
    .
     
     
    std::vector<std::string>*	ploc_po_results = (*loc_o_it_tmp).second;
    assert( loc_o_sizes.size() == ploc_po_results->size());//la je ne sais pas trop, je ne connait pas trop les asssert :aie: en gros une gestion d'erreur
    std::transform(loc_o_sizes.begin(),loc_o_sizes.end(),
                             ploc_po_results->begin(),loc_o_sizes.begin(),
                             &MaxSize );
    N'hésite pas si y as un truc que tu ne comprend pas.

  4. #4
    Invité de passage
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1
    Par défaut IL NE MARCHE PAS
    Bonsoir le monde je suis un jeune étudiant en Cpp et la j'ai mon prof qui nous à donner un TP sur les boucles je les fait mais seulement j'ai mon code qui ne marche pas sur le C je ne sais pas trop pour koi alors j'aimerais que vous m'aidiez SVPL merci.

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main(int argc, char *argv[])
    {int note,cumul,moyenne,reel;
    note=0;
    moyenne=0;
    cumul=0;
    cout<<"taper une note";
    cin>>des_notes;
    cout"la note calculé";
    notes=10
    while(notes<10 et nb2<12);
    cout<<"la note la plus basse";
    if
    (continuer=jsq);
    cout<<"voulez-vous taper d'autres notes?";
    cin>>des notes;
    if
    for(notes=14jsq+cumul);
    cout<<"la moyenne>12";
    fsi
    ftq


    voilà la bête

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Par défaut
    Deja, pourrais tu poster dans un nouveau message, car là ton post n'a absolument rien a voir avec le fil de la discussion...
    Faudrait qu'un moderateur mette ton message a la bonne place...

    Sinon je ne comprends pas ton problème. C'est quoi l'erreur ? Sachant que le plaintif "ca maaaaarche passss" de base n'est pas une erreur...

    Si tu essaies de compiler ton code dans un .c (tu nous dis utiliser le C) alors ce n'est pas possible car c'est du C++, le compilateur ne va pas aimer.

    Mais précise ce que tu veux.
    ++

Discussions similaires

  1. [Débuter] Transcription de code C++ vers code Python
    Par Jiyuu dans le forum Qt Quick
    Réponses: 3
    Dernier message: 04/09/2013, 11h30
  2. transcription du code en xsl
    Par prugne dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 08/11/2011, 10h19
  3. Réponses: 24
    Dernier message: 25/03/2010, 08h58
  4. Probleme avec la STL(vector) avec code C
    Par Benjy dans le forum SL & STL
    Réponses: 12
    Dernier message: 06/04/2006, 12h54

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