Classe front_insert_iterator
Descrive un adattatore dell'iteratore che soddisfa i requisiti dell'iteratore di output. Inserisce, anziché sovrascrivere, gli elementi nella parte anteriore di una sequenza. Fornisce quindi una semantica diversa dalla semantica di sovrascrittura fornita dagli iteratori dei contenitori di sequenze C++. Viene creato un modello della classe front_insert_iterator
in base al tipo di contenitore.
Sintassi
template <class Container>
class front_insert_iterator;
Parametri
Contenitore
Tipo di contenitore nella cui parte iniziale devono essere inseriti gli elementi da un front_insert_iterator
.
Osservazioni:
Il contenitore deve soddisfare i requisiti di una sequenza di inserimento all'inizio in cui è possibile inserire gli elementi all'inizio della sequenza in un tempo costante ammortizzato. I contenitori sequenziali della libreria standard C++ definiti dalla classe deque e dalla classe list forniscono la funzione membro push_front
necessaria e soddisfano tali requisiti. Al contrario, i contenitori di sequenza definiti dalla classe vettoriale non soddisfano questi requisiti e non possono essere adattati per l'uso con front_insert_iterator
s. Un front_insert_iterator
deve essere sempre inizializzato con il relativo contenitore.
Costruttori
Costruttore | Descrizione |
---|---|
front_insert_iterator | Crea un iteratore in grado di inserire elementi all'inizio di un oggetto contenitore specificato. |
Typedef
Nome tipo | Descrizione |
---|---|
container_type | Tipo che rappresenta il contenitore in cui è necessario effettuare un inserimento all'inizio. |
reference | Tipo che fornisce un riferimento a un elemento di una sequenza controllata dal contenitore associato. |
Operatori
Operatore | Descrizione |
---|---|
operator* | Operatore di dereferenziazione usato per implementare l'espressione dell'iteratore di output * i = x per un inserimento all'inizio. |
operator++ | Incrementa front_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 all'inizio. |
Requisiti
Intestazione: <iteratore>
Spazio dei nomi: std
front_insert_iterator::container_type
Tipo che rappresenta il contenitore in cui è necessario effettuare un inserimento all'inizio.
typedef Container container_type;
Osservazioni:
Il tipo è un sinonimo del parametro di modello Container.
Esempio
// front_insert_iterator_container_type.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L1;
front_insert_iterator<list<int> >::container_type L2 = L1;
front_inserter ( L2 ) = 20;
front_inserter ( L2 ) = 10;
front_inserter ( L2 ) = 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 10 20 ).
*/
front_insert_iterator::front_insert_iterator
Crea un iteratore in grado di inserire elementi all'inizio di un oggetto contenitore specificato.
explicit front_insert_iterator(Container& _Cont);
Parametri
_Cont
Oggetto contenitore in cui front_insert_iterator
deve inserire gli elementi.
Valore restituito
front_insert_iterator
per l'oggetto contenitore di parametri.
Esempio
// front_insert_iterator_front_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 < 9 ; ++i )
{
L.push_back ( 2 * 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
front_inserter ( L ) = 20;
// Alternatively, one may use the template function
front_insert_iterator< list < int> > Iter(L);
*Iter = 30;
cout << "After the front 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:
( -2 0 2 4 6 8 10 12 14 16 ).
After the front insertions, the list L is:
( 30 20 -2 0 2 4 6 8 10 12 14 16 ).
*/
front_insert_iterator::operator*
Dereferenzia l'iteratore di inserimento restituendo l'elemento a cui punta.
front_insert_iterator<Container>& operator*();
Valore restituito
La funzione membro restituisce il valore dell'elemento puntato.
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
// front_insert_iterator_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 = -1 ; i < 9 ; ++i )
{
L.push_back ( 2 * i );
}
cout << "The list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++)
cout << *L_Iter << " ";
cout << ")." << endl;
front_insert_iterator< list < int> > Iter(L);
*Iter = 20;
// Alternatively, you may use
front_inserter ( L ) = 30;
cout << "After the front 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:
( -2 0 2 4 6 8 10 12 14 16 ).
After the front insertions, the list L is:
( 30 20 -2 0 2 4 6 8 10 12 14 16 ).
*/
front_insert_iterator::operator++
Incrementa back_insert_iterator
alla posizione successiva in cui è possibile archiviare un valore.
front_insert_iterator<Container>& operator++();
front_insert_iterator<Container> operator++(int);
Valore restituito
front_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
// front_insert_iterator_op_incre.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L1;
front_insert_iterator<list<int> > iter ( L1 );
*iter = 10;
iter++;
*iter = 20;
iter++;
*iter = 30;
iter++;
list <int>::iterator vIter;
cout << "The list L1 is: ( ";
for ( vIter = L1.begin ( ) ; vIter != L1.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
}
/* Output:
The list L1 is: ( 30 20 10 ).
*/
front_insert_iterator::operator=
Accoda (inserisce mediante push) un valore all'inizio del contenitore.
front_insert_iterator<Container>& operator=(typename Container::const_reference val);
front_insert_iterator<Container>& operator=(typename Container::value_type&& val);
Parametri
val
Valore da assegnare al contenitore.
Valore restituito
Riferimento all'ultimo elemento inserito all'inizio del contenitore.
Osservazioni:
Il primo operatore membro valuta container.push_front( val)
e quindi restituisce *this
.
Il secondo operatore membro valuta
container->push_front((typename Container::value_type&&) val)
,
e quindi restituisce *this
.
Esempio
// front_insert_iterator_op_assign.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L1;
front_insert_iterator<list<int> > iter ( L1 );
*iter = 10;
iter++;
*iter = 20;
iter++;
*iter = 30;
iter++;
list <int>::iterator vIter;
cout << "The list L1 is: ( ";
for ( vIter = L1.begin ( ) ; vIter != L1.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
}
/* Output:
The list L1 is: ( 30 20 10 ).
*/
front_insert_iterator::reference
Tipo che fornisce un riferimento a un elemento di una sequenza controllata dal contenitore associato.
typedef typename Container::reference reference;
Esempio
// front_insert_iterator_reference.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L;
front_insert_iterator<list<int> > fiivIter( L );
*fiivIter = 10;
*fiivIter = 20;
*fiivIter = 30;
list<int>::iterator LIter;
cout << "The list L is: ( ";
for ( LIter = L.begin ( ) ; LIter != L.end ( ); LIter++)
cout << *LIter << " ";
cout << ")." << endl;
front_insert_iterator<list<int> >::reference
RefFirst = *(L.begin ( ));
cout << "The first element in the list L is: "
<< RefFirst << "." << endl;
}
/* Output:
The list L is: ( 30 20 10 ).
The first element in the list L is: 30.
*/
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++