Partager via


back_insert_iterator, classe

Décrit un adaptateur d’itérateur qui répond aux exigences d’un itérateur de sortie. Elle insère, plutôt que remplace, des éléments de la fin d'une séquence et fournit ainsi une sémantique différente de la sémantique de remplacement fournie par les itérateurs des conteneurs de la séquence C++. La classe back_insert_iterator est mise en modèle d'après le type de conteneur.

Syntaxe

template <class Container>
class back_insert_iterator;

Paramètres

Conteneur
Type de conteneur à la fin duquel des éléments doivent être insérés par un back_insert_iterator.

Notes

Le conteneur doit répondre aux exigences d’une insertion de fin de séquence où il est possible d’insérer des éléments à la fin de la séquence dans le temps fixe amorti. Les conteneurs de séquences de bibliothèque C++ Standard définis par la classe deque, la classe list et la classe vector fournissent la fonction membre push_back nécessaire et répondent aux exigences. Ces trois conteneurs et chaînes peuvent chacun être adaptés à l’utilisation avec back_insert_iterators. Un back_insert_iterator doit toujours être initialisé avec son conteneur.

Constructeurs

Constructeur Description
back_insert_iterator Construit back_insert_iterator qui insère des éléments après le dernier élément d'un conteneur.

Typedefs

Nom de type Description
container_type Type qui fournit un conteneur pour le back_insert_iterator.
référence Type qui fournit une référence pour le back_insert_iterator.

Opérateurs

Opérateur Description
operator* Opérateur de suppression de référence utilisé pour implémenter l’expression d’itérateur de sortie * i = x pour une insertion de fin.
operator++ Incrémente le back_insert_iterator à l'emplacement suivant où une valeur peut être stockée.
operator= Opérateur d’assignation utilisé pour implémenter l’expression d’itérateur de sortie * i = x pour une insertion de fin.

Spécifications

En-tête : <itérateur>

Espace de noms : std

back_insert_iterator ::back_insert_iterator

Construit back_insert_iterator qui insère des éléments après le dernier élément d'un conteneur.

explicit back_insert_iterator(Container& _Cont);

Paramètres

_Suite
Conteneur dans lequel back_insert_iterator doit insérer un élément.

Valeur de retour

back_insert_iterator pour le paramètre container.

Exemple

// back_insert_iterator_back_insert_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for ( i = 1 ; i < 4 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The initial vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   // Insertions with member function
   back_inserter ( vec ) = 40;
   back_inserter ( vec ) = 50;

   // Alternatively, insertions can be done with template function
   back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 600;
   backiter++;
*backiter = 700;

   cout << "After the insertions, the vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}
The initial vector vec is: ( 1 2 3 ).
After the insertions, the vector vec is: ( 1 2 3 40 50 600 700 ).

back_insert_iterator ::container_type

Type qui fournit un conteneur pour le back_insert_iterator.

typedef Container
container_type;

Notes

Le type est un synonyme du paramètre de modèle Container.

Exemple

// back_insert_iterator_container_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 4 ; ++i )
   {
      vec.push_back (  i );
   }

   vector <int>::iterator vIter;
   cout << "The original vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> >::container_type vec1 = vec;
   back_inserter ( vec1 ) = 40;

   cout << "After the insertion, the vector is: ( ";
   for ( vIter = vec1.begin ( ) ; vIter != vec1.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}
The original vector vec is: ( 1 2 3 ).
After the insertion, the vector is: ( 1 2 3 40 ).

back_insert_iterator ::operator*

Opérateur de déreferencing utilisé pour implémenter l’expression itérateur de sortie * i = x.

back_insert_iterator<Container>& operator*();

Valeur de retour

Référence à l’élément inséré à la fin du conteneur.

Notes

Utilisé pour implémenter l’expression d’itérateur de sortie *Valeur Iter = . Si Iter est un itérateur qui traite un élément dans une séquence, la valeur *Iter = remplace cet élément par valeur et ne modifie pas le nombre total d’éléments de la séquence.

Exemple

// back_insert_iterator_back_insert.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 4 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 10;
   backiter++;      // Increment to the next element
*backiter = 20;
   backiter++;

   cout << "After the insertions, the vector vec becomes: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}
The vector vec is: ( 1 2 3 ).
After the insertions, the vector vec becomes: ( 1 2 3 10 20 ).

back_insert_iterator ::operator++

Incrémente le back_insert_iterator à l'emplacement suivant où une valeur peut être stockée.

back_insert_iterator<Container>& operator++();
back_insert_iterator<Container> operator++(int);

Valeur de retour

back_insert_iterator qui cible l’emplacement suivant où une valeur peut être stockée.

Notes

Les opérateurs de préincrémentation et de postincrémentation retournent le même résultat.

Exemple

// back_insert_iterator_op_incre.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 3 ; ++i )
   {
      vec.push_back ( 10 * i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 30;
   backiter++;      // Increment to the next element
*backiter = 40;
   backiter++;

   cout << "After the insertions, the vector vec becomes: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}
The vector vec is: ( 10 20 ).
After the insertions, the vector vec becomes: ( 10 20 30 40 ).

back_insert_iterator ::operator=

Ajoute ou pousse une valeur à la fin d’un conteneur.

back_insert_iterator<Container>& operator=(typename Container::const_reference val);
back_insert_iterator<Container>& operator=(typename Container::value_type&& val);

Paramètres

val
Valeur à insérer dans le conteneur.

Valeur de retour

Référence au dernier élément inséré à la fin du conteneur.

Notes

Le premier opérateur membre évalue Container.push_back( val),

puis retourne *this. Le deuxième opérateur membre évalue

container->push_back((typename Container::value_type&&)val),

puis retourne *this.

Exemple

// back_insert_iterator_op_assign.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 4 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 10;
   backiter++;      // Increment to the next element
*backiter = 20;
   backiter++;

   cout << "After the insertions, the vector vec becomes: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}

back_insert_iterator ::reference

Type qui fournit une référence pour le back_insert_iterator.

typedef typename Container::reference reference;

Notes

Le type décrit une référence à un élément de la séquence contrôlée par le conteneur associé.

Exemple

// back_insert_iterator_reference.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 4 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> >::reference
        RefLast = *(vec.end ( ) - 1 );
   cout << "The last element in the vector vec is: "
        << RefLast << "." << endl;
}
The vector vec is: ( 1 2 3 ).
The last element in the vector vec is: 3.

Voir aussi

<iterator>
Sécurité des threads dans la bibliothèque C++ Standard
Informations de référence sur la bibliothèque standard C++