Condividi tramite


back_insert_iterator Class

Descrive un adattatore dell'iteratore che soddisfa i requisiti dell'iteratore di output. Inserisce, anziché sovrascrivere, gli elementi nel back-end di una sequenza, fornendo in questo modo una semantica diversa dalla semantica di sovrascrittura fornita dagli iteratori dei contenitori sequenziali C++. Viene creato un modello della classe back_insert_iterator in base al tipo di contenitore.

Sintassi

template <class Container>
class back_insert_iterator;

Parametri

Contenitore
Tipo di contenitore nella cui parte finale devono essere inseriti gli elementi da back_insert_iterator.

Osservazioni:

Il contenitore deve soddisfare i requisiti di una sequenza di inserimento inversa in cui è possibile inserire gli elementi alla fine della sequenza in un tempo costante ammortizzato. I contenitori di sequenza della libreria standard C++ definiti dalle classi deque, list e vector forniscono la funzione membro push_back necessaria e soddisfano questi requisiti. Questi tre contenitori e stringhe possono essere adattati per l'uso con back_insert_iterators. Un back_insert_iterator deve essere sempre inizializzato con il relativo contenitore.

Costruttori

Costruttore Descrizione
back_insert_iterator Costruisce un back_insert_iterator che inserisce gli elementi dopo l'ultimo elemento di un contenitore.

Typedef

Nome tipo Descrizione
container_type Tipo che fornisce un contenitore per back_insert_iterator.
reference Tipo che fornisce un riferimento per back_insert_iterator.

Operatori

Operatore Descrizione
operator* Operatore di dereferenziazione usato per implementare l'espressione dell'iteratore di output * i = x per un inserimento inverso.
operator++ Incrementa back_insert_iterator alla posizione successiva in cui è possibile archiviare un valore.
operator= Operatore di assegnazione usato per implementare l'espressione dell'iteratore di output * i = x per un inserimento inverso.

Requisiti

Intestazione: <iteratore>

Spazio dei nomi: std

back_insert_iterator::back_insert_iterator

Costruisce un back_insert_iterator che inserisce gli elementi dopo l'ultimo elemento di un contenitore.

explicit back_insert_iterator(Container& _Cont);

Parametri

_Cont
Il contenitore in cui back_insert_iterator deve inserire un elemento.

Valore restituito

back_insert_iterator per il contenitore di parametri.

Esempio

// 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

Tipo che fornisce un contenitore per back_insert_iterator.

typedef Container
container_type;

Osservazioni:

Il tipo è un sinonimo del parametro di modello Container.

Esempio

// 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*

Operatore di dereferenziazione usato per implementare l'espressione dell'iteratore di output * i = x.

back_insert_iterator<Container>& operator*();

Valore restituito

Riferimento all'elemento inserito alla fine del contenitore.

Osservazioni:

Usato per implementare l'espressione dell'iteratore di output *Valore iter = . Se Iter è un iteratore che punta a un elemento in una sequenza, *Valore Iter = sostituisce tale elemento con valore e non modifica il numero totale di elementi nella sequenza.

Esempio

// 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++

Incrementa back_insert_iterator alla posizione successiva in cui è possibile archiviare un valore.

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

Valore restituito

back_insert_iterator che punta alla posizione successiva in cui può essere archiviato un valore.

Osservazioni:

Sia gli operatori di pre-incremento che quelli di post-incremento restituiscono lo stesso risultato.

Esempio

// 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=

Aggiunge o esegue il push di un valore nel back-end di un contenitore.

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

Parametri

val
Valore da inserire nel contenitore.

Valore restituito

Riferimento all'ultimo elemento inserito alla fine del contenitore.

Osservazioni:

Il primo operatore membro valuta Container.push_back( val)

e quindi restituisce *this. Il secondo operatore membro valuta

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

e quindi restituisce *this.

Esempio

// 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

Tipo che fornisce un riferimento per back_insert_iterator.

typedef typename Container::reference reference;

Osservazioni:

Il tipo descrive un riferimento a un elemento della sequenza controllata dal contenitore associato.

Esempio

// 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.

Vedi anche

<iterator>
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Informazioni di riferimento per la libreria standard C++