Partager via


insert_iterator, classe

Décrit un adaptateur d’itérateur qui répond aux exigences d’un itérateur de sortie. Il insère, au lieu de remplacer, des éléments dans une séquence. Il fournit ainsi une sémantique différente de la sémantique de remplacement fournie par les itérateurs de la séquence C++ et des conteneurs associatifs. La classe insert_iterator est mise en modèle sur le type de conteneur qui est adapté.

Syntaxe

template <class Container>
class insert_iterator;

Paramètres

Conteneur
Type de conteneur dans lequel des éléments doivent être insérés par un insert_iterator.

Notes

Le conteneur de type Container doit satisfaire aux exigences d’un conteneur de taille variable et avoir une fonction membre d’insertion à deux arguments où les paramètres sont de type Container::iterator et Container::value_type qui retourne un type Container::iterator. La séquence de bibliothèque standard C++ et les conteneurs associatifs triés sont conformes à ces exigences et peuvent être adaptés pour être utilisés avec des objets insert_iterator. Pour les conteneurs associatifs, l’argument de position est traité comme un indice, lequel peut améliorer ou dégrader les performances selon sa qualité. Un insert_iterator doit toujours être initialisé avec son conteneur.

Constructeurs

Constructeur Description
insert_iterator Construit un insert_iterator qui insère un élément à une position spécifiée dans un conteneur.

Typedefs

Nom de type Description
container_type Type qui représente le conteneur dans lequel une insertion générale doit être effectuée.
référence Type qui fournit une référence à un élément dans une séquence contrôlée par le conteneur associé.

Opérateurs

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

Spécifications

En-tête : <itérateur>

Espace de noms : std

insert_iterator ::container_type

Type qui représente le conteneur dans lequel une insertion générale doit être effectuée.

typedef Container container_type;

Notes

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

Exemple

// insert_iterator_container_type.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>

int main( )
{
   using namespace std;

   list<int> L1;
   insert_iterator<list<int> >::container_type L2 = L1;
   inserter ( L2, L2.end ( ) ) = 20;
   inserter ( L2, L2.end ( ) ) = 10;
   inserter ( L2, L2.begin ( ) ) = 40;

   list <int>::iterator vIter;
   cout << "The list L2 is: ( ";
   for ( vIter = L2.begin ( ) ; vIter != L2.end ( ); vIter++ )
      cout << *vIter << " ";
   cout << ")." << endl;
}
/* Output:
The list L2 is: ( 40 20 10 ).
*/

insert_iterator ::insert_iterator

Construit un insert_iterator qui insère un élément à une position spécifiée dans un conteneur.

insert_iterator(Container& _Cont, typename Container::iterator _It);

Paramètres

_Suite
Conteneur dans lequel insert_iterator doit insérer des éléments.

_Il
Position de l’insertion.

Notes

Tous les conteneurs ont leur fonction membre d’insertion appelée par insert_iterator. Pour les conteneurs associatifs, la position du paramètre est simplement une suggestion. La fonction d’insertion fournit un moyen pratique pour insérer des valeurs.

Exemple

// insert_iterator_insert_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>

int main( )
{
   using namespace std;
   int i;
   list <int>::iterator L_Iter;

   list<int> L;
   for (i = 1 ; i < 4 ; ++i )
   {
      L.push_back ( 10 * i );
   }

   cout << "The list L is:\n ( ";
   for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++)
      cout << *L_Iter << " ";
   cout << ")." << endl;

   // Using the member function to insert an element
   inserter ( L, L.begin ( ) ) = 2;

   // Alternatively, you may use the template version
   insert_iterator< list < int> > Iter(L, L.end ( ) );
*Iter = 300;

   cout << "After the insertions, the list L is:\n ( ";
   for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
      cout << *L_Iter << " ";
   cout << ")." << endl;
}
/* Output:
The list L is:
( 10 20 30 ).
After the insertions, the list L is:
( 2 10 20 30 300 ).
*/

insert_iterator ::operator*

Supprime la référence à l’itérateur d’insertion retournant l’élément traité.

insert_iterator<Container>& operator*();

Valeur de retour

La fonction membre retourne la valeur de l’élément ciblé.

Notes

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

Exemple

// insert_iterator_op_deref.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>

int main( )
{
   using namespace std;
   int i;
   list <int>::iterator L_Iter;

   list<int> L;
   for (i = 0 ; i < 4 ; ++i )
   {
      L.push_back ( 2 * i );
   }

   cout << "The original list L is:\n ( ";
   for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
      cout << *L_Iter << " ";
   cout << ")." << endl;

   insert_iterator< list < int> > Iter(L, L.begin ( ) );
*Iter = 10;
*Iter = 20;
*Iter = 30;

   cout << "After the insertions, the list L is:\n ( ";
   for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
      cout << *L_Iter << " ";
   cout << ")." << endl;
}
/* Output:
The original list L is:
( 0 2 4 6 ).
After the insertions, the list L is:
( 10 20 30 0 2 4 6 ).
*/

insert_iterator ::operator++

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

insert_iterator<Container>& operator++();

insert_iterator<Container> operator++(int);

Paramètres

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

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

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

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

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

   insert_iterator<vector<int> > ii ( vec, vec.begin ( ) );
*ii = 30;
   ii++;
*ii = 40;
   ii++;
*ii = 50;

   cout << "After the insertions, the vector vec becomes:\n ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
      cout << *vIter << " ";
   cout << ")." << endl;
}
/* Output:
The vector vec is:
( 1 2 3 4 ).
After the insertions, the vector vec becomes:
( 30 40 50 1 2 3 4 ).
*/

insert_iterator ::operator=

Insère une valeur dans le conteneur et retourne l’itérateur mis à jour pour pointer vers le nouvel élément.

insert_iterator<Container>& operator=(
    typename Container::const_reference val,);

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

Paramètres

val
Valeur à assigner au conteneur.

Valeur de retour

Référence à l’élément inséré dans le conteneur.

Notes

Le premier opérateur de membre évalue

Iter = container->insert(Iter, val);

++Iter;

puis retourne *this.

Le deuxième opérateur membre évalue

Iter = container->insert(Iter, std::move(val));

++Iter;

puis retourne *this.

Exemple

// insert_iterator_op_assign.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>

int main( )
{
   using namespace std;
   int i;
   list <int>::iterator L_Iter;

   list<int> L;
   for (i = 0 ; i < 4 ; ++i )
   {
      L.push_back ( 2 * i );
   }

   cout << "The original list L is:\n ( ";
   for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
      cout << *L_Iter << " ";
   cout << ")." << endl;

   insert_iterator< list < int> > Iter(L, L.begin ( ) );
*Iter = 10;
*Iter = 20;
*Iter = 30;

   cout << "After the insertions, the list L is:\n ( ";
   for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
      cout << *L_Iter << " ";
   cout << ")." << endl;
}
/* Output:
The original list L is:
( 0 2 4 6 ).
After the insertions, the list L is:
( 10 20 30 0 2 4 6 ).
*/

insert_iterator ::reference

Type qui fournit une référence à un élément dans une séquence contrôlée par le conteneur associé.

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

// insert_iterator_container_reference.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>

int main( )
{
   using namespace std;

   list<int> L;
   insert_iterator<list<int> > iivIter( L , L.begin ( ) );
*iivIter = 10;
*iivIter = 20;
*iivIter = 30;

   list<int>::iterator LIter;
   cout << "The list L is: ( ";
   for ( LIter = L.begin ( ) ; LIter != L.end ( ); LIter++ )
      cout << *LIter << " ";
   cout << ")." << endl;

   insert_iterator<list<int> >::reference
        RefFirst = *(L.begin ( ));
   cout << "The first element in the list L is: "
        << RefFirst << "." << endl;
}
/* Output:
The list L is: ( 10 20 30 ).
The first element in the list L is: 10.
*/

Voir aussi

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