Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les itérateurs et les foncteurs

    5 août 2020 à 21:51:58

    Bonjour,

    J'ai un problème au niveau des itérateurs et des foncteurs, j'ai les compris mais je sais pas quand les utiliser ou est ce que on peut les utiliser avec tout les types de conteneurs.

    Merci.

    • Partager sur Facebook
    • Partager sur Twitter
      6 août 2020 à 23:45:11

      Bonjour,

      Il existe une famille de fonctions qui utilisent beaucoup les itérateurs et souvent aussi des "callables" dont le foncteur est une possibilité. On les appelle les algorithmes et presque tous sont définis dans l'#include <algorithm>. Les itérateurs permettent de parcourir les collections ou les flux.

      Quelques exemples d'utilisations d'algorithmes

      //Pour vérifier si une collection est intégralement trié :
           std::is_sorted( std::cbegin( vect ) , std::cend( vect ) );
      
      //Pour copier un tableau dans une/un collection/tableau déjà pré-dimensionné :
           std::copy_n( tab , std::size( tab ) , std::begin( arr ) );	// nécessite C++17 ou +
      
      //Pour trier dans l'ordre inverse (le plus grand en premier) :
           std::sort( vect.begin() , vect.end() , std::greater<>{} ); // avec le foncteur greater<>
      //        ou
           std::sort( vect.rbegin() , vect.rend() );                  // ou des itérateurs 'reverse'
      
      //Pour parcourir et afficher dans l'ordre inverse :
           std::for_each( vect.crbegin( ) , vect.crend( ) , []( int x ) { std::cout << x << ' '; } ); // ici le foncteur est une lambda
      //        ou
           std::copy( vect.crbegin( ) , vect.crend( ) , std::ostream_iterator( std::cout , " "  ) );
      
      //Copier une/un collection/flux dans une/un collection/flux :
           std::copy( src.cbegin( ) , src.cend( ) , std::back_inserter( dst ) ); // ajoute
      //        ou                                                               à partir d'un flux
           std::copy(	std::istream_iterator< double >( std::cin ) ,
                      std::istream_iterator< double >() , std::back_inserter( dst ) );
      //        ou                                                               copie de collection vers flux
           std::copy( src.cbegin() , src.cend() , std::ostream_iterator( std::cout , " "  ) );
      
      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

        7 août 2020 à 12:13:46

        >> mais je sais pas quand les utiliser ou est ce que on peut les utiliser avec tout les types de conteneurs.

        Pour les itérateurs, autant que possible, surtout ceux des conteneurs de la librairie standard. Ton code n'en sera que plus générique et réutilisable.

        • Partager sur Facebook
        • Partager sur Twitter

        Les itérateurs et les foncteurs

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown