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 :

Limiter l'algorithme copy avec istream_iterator


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Février 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Limiter l'algorithme copy avec istream_iterator
    Bonjour à tous, pour la première fois je ne trouve pas de solution à mon problème.
    Comment limiter l'algorithme copy depuis un flux vers un conteneur pour n entiers comme on le fait avec les iterateurs de conteneurs "copy(nom. begin(), nom. begin() +n, Liste. begin())".
    En effet les istream_iterator ne supportent pas cette opération et la documentation reste faible sur ce sujet.
    Merci d'avance si vous avez la solution.

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    On ne fait pas...

    Pour être plus précis, la bibliothèque standard ne propose pas de primitive suffisamment évoluée pour le faire. Les algorithmes sont trop spécialisés, les itérateurs trop complexes à faire alors qu'un moyen propre serait d'avoir 2 nouveaux itérateurs: zip_iterator et int_iterator par exemple et les utilisés comme ceci: std::copy(zip_iterator(std::istream_iterator{...}, int_iterator{}), zip_iterator(std::istream_iterator{}, int_iterator{n}), list.begin()).

    Mais faire une classe d'itérateur demande quand même pas mal d'effort. Je ne perds pas espoir de voir range v3 dans le standard car cela simplifie beaucoup l'usage des algorithmes et les prérequis pour faire un itérateur.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je pense plutôt qu'il veut lire n entiers depuis le même itérateur, pas utiliser n itérateurs différents. std::copy_n est tout indiqué pour cela.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Février 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    En effet je n'avait pas vu copy_n dans les algorithme.
    pas de chance j'ai "copy_if" mais pas "copy_n" je doit continuer sur cette piste...

  5. #5
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Si copy_n, te suffit, tu peux le simuler en invalidant le flux au bout de x tour de boucle et copy_if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    std::copy_if(first, last, [&,n=0](auto&) mutable {
      if (++n == 42) {
        stream.setstate(std::ios_base::failbit);
      }
      return true;
    });
    C'est moche, spécifique au itérateur sur flux et pas mieux qu'une bête boucle fait à la main.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Février 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci pour vos réponses, cela m'a été très utile.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] limitation à 255 caractères copie avec liaison
    Par jfhoo dans le forum Excel
    Réponses: 2
    Dernier message: 23/06/2012, 13h25
  2. Réponses: 5
    Dernier message: 04/04/2007, 09h34
  3. Réponses: 46
    Dernier message: 14/03/2007, 17h47
  4. Limite dans la copie de plusieurs feuilles Excel
    Par Thib dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/12/2006, 14h33
  5. Limite du WebBrowser.Navigate avec un About:
    Par Bill14 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 30/03/2005, 12h41

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