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 :

utilisation de la STL pour limiter ma boucle for


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut utilisation de la STL pour limiter ma boucle for
    Bonjour, j'ai le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    vector<double> v(4);
     
    for(int i = 0 ; i < 4 ; i++)
        v[i] = i;
    Est-il possible d'utiliser une fonction de la STL pour ne pas avoir à écrire cette boucle for ?

    J'ai regardé du côté de std::fill mais je n'ai pas trouvé grand chose...

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par salseropom Voir le message
    Est-il possible d'utiliser une fonction de la STL pour ne pas avoir à écrire cette boucle for ?

    J'ai regardé du côté de std::fill mais je n'ai pas trouvé grand chose...

    Merci d'avance
    euuuh à quoi cela va-t-il te servir ?
    Sinon tu peux prendre un itérateur mais franchement je ne vois pas l'intérêt à part prendre un while()

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Avec boost tu peux faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::vector<double> v(
        boost::counting_iterator<int>(0),
        boost::counting_iterator<int>(4));

  4. #4
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Citation Envoyé par salseropom Voir le message
    Bonjour, j'ai le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    vector<double> v(4);
     
    for(int i = 0 ; i < 4 ; i++)
        v[i] = i;
    Est-il possible d'utiliser une fonction de la STL pour ne pas avoir à écrire cette boucle for ?

    J'ai regardé du côté de std::fill mais je n'ai pas trouvé grand chose...

    Merci d'avance
    for_each + foncteur ? xD.
    Plus sérieusement en C++0x : std::initializer_lists...
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    avec l'algorithm std::generate_n ou std::generate, un back_inserter et un functor qui renvoit i+1?

    mais bon, si c'est juste +1 à chaque fois..

    http://www.cplusplus.com/reference/a...hm/generate_n/

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par salseropom Voir le message
    Bonjour, j'ai le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    vector<double> v(4);
     
    for(int i = 0 ; i < 4 ; i++)
        v[i] = i;
    Est-il possible d'utiliser une fonction de la STL pour ne pas avoir à écrire cette boucle for ?
    Sur STLPort, il y a une fonction iota() qui fait exactement ça (elle tire son nom d'une fonction APL). Tu écriras

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iota(v.begin(), v.end(), 0);
    (le zéro dans l'appel est la base, la première valeur de la suite, affectée à v[0])

    Elle n'existe malheureusement pas chez Dinkumware, mais tu peux la redéfinir en utilisant generate() et un foncteur qui gère l'énumération.

    Par exemple, pour générer des suites affines,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct LinGen { 
       int val;
       int pas; 
       lingen(int b=0,int p=1) val(b),pas(p){} 
       int operator()() {
           int v=val;
           val+=pas;
           return v;} 
    };
    Ca s'appelle avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vector<int> v(12);
    generate(v.begin(),v.end(),LinGen(0,1));
    Le premier paramètre du constructeur est la base, le second le pas (la différence entre deux valeurs successives)

    LinGen(0,1) génère 0 1 2 3 4 ...
    LinGen(1,2) génère 1 3 5 7 9 ...
    LinGen(30,-2) génère 30 28 26 24 22 ...

    et ainsi de suite. Et bien sur, ca se généralise à des suites plus complexes, ou des flottants...

    Ce n'est pas tout à fait aussi élégant que ce que tu aurais dans des langages vectoriels (façon APL, en J, par exemple, tu écris un truc comme base+pas*i.nb_vals), mais c'est une bonne approximation.

    Francois
    Dernière modification par Invité ; 06/02/2010 à 14h39.

Discussions similaires

  1. Réponses: 8
    Dernier message: 31/07/2009, 21h10
  2. [XL-2003] Indices pour cellules dans boucle for
    Par doowy38 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/06/2009, 15h51
  3. Compter le nombre d'enregistrements pour limiter une boucle
    Par guivrator dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 12/05/2009, 13h56
  4. Aide pour syntaxe de boucle "FOR"
    Par tribaleur dans le forum ASP
    Réponses: 2
    Dernier message: 31/05/2006, 14h03

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