back_insert_iterator-Klasse
Beschreibt einen Iteratoradapter, der den Anforderungen eines Ausgabeiterators entspricht. Er fügt Elemente in das Ende einer Sequenz ein, anstatt sie zu überschreiben, und bietet somit Semantik, die sich von der Semantik zum Überschreiben unterscheidet, die von den Iteratoren der C++-Sequenzcontainer bereitgestellt wird. Die back_insert_iterator
-Klasse ist für den Typ des Containers vorlagenbasiert.
Syntax
template <class Container>
class back_insert_iterator;
Parameter
Container
Der Typ des Containers, an dessen Ende Elemente von einem back_insert_iterator
eingefügt werden sollen.
Hinweise
Der Container muss den Anforderungen einer Sequenz zum Einfügen am Ende entsprechen, in der es möglich ist, die Elemente am Ende der Sequenz in amortisierter konstanter Zeit einzufügen. Die C++-Standardbibliothek-Sequenzcontainer, die von der deque-Klasse, der list-Klasse und der vector-Klasse definiert werden, stellen die erforderliche push_back
-Memberfunktion bereit, und erfüllen diese Anforderungen. Diese drei Container und Zeichenfolgen können jeweils an die Verwendung mit back_insert_iterator
s angepasst werden. Ein back_insert_iterator
muss immer mit seinem Container initialisiert werden.
Konstruktoren
Konstruktor | Beschreibung |
---|---|
back_insert_iterator | Erstellt einen back_insert_iterator , der Elemente nach dem letzten Element in einen Container einfügt. |
TypeDefs
Typname | Beschreibung |
---|---|
container_type | Ein Typ, der einen Container für den back_insert_iterator bereitstellt. |
reference | Ein Typ, der einen Verweis für den back_insert_iterator bereitstellt. |
Operatoren
Operator | Beschreibung |
---|---|
operator* | Der Dereferenzierungsoperator, der verwendet wird, um den Ausgabeiteratorausdruck *i = x für eine Einfügung am Ende zu implementieren. |
operator++ | Inkrementiert back_insert_iterator zum folgenden Speicherort, an dem ein Wert gespeichert werden kann. |
operator= | Der Zuweisungsoperator, der verwendet wird, um den Ausgabeiteratorausdruck *i = x für eine Einfügung am Ende zu implementieren. |
Anforderungen
Kopfzeile: <Iterator>
Namespace: std
back_insert_iterator::back_insert_iterator
Erstellt einen back_insert_iterator
, der Elemente nach dem letzten Element in einen Container einfügt.
explicit back_insert_iterator(Container& _Cont);
Parameter
_Cont
Der Container, in den back_insert_iterator
ein Element einfügen soll.
Rückgabewert
Ein back_insert_iterator
für den Parametercontainer.
Beispiel
// 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
Ein Typ, der einen Container für den back_insert_iterator
bereitstellt.
typedef Container
container_type;
Hinweise
Der Typ ist synonym mit dem Vorlagenparameter Container.
Beispiel
// 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*
Dereferencing-Operator zum Implementieren des Ausgabe iteratorausdrucks * i = x.
back_insert_iterator<Container>& operator*();
Rückgabewert
Ein Verweis auf das am Ende des Containers eingefügte Element.
Hinweise
Wird verwendet, um den Ausgabe-Iteratorausdruck *Iter-Wert = zu implementieren. Wenn Iter ein Iterator ist, der ein Element in einer Sequenz adressiert, ersetzt *Iter-Wert = dieses Element durch einen Wert und ändert nicht die Gesamtanzahl der Elemente in der Sequenz.
Beispiel
// 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++
Inkrementiert back_insert_iterator
zum folgenden Speicherort, an dem ein Wert gespeichert werden kann.
back_insert_iterator<Container>& operator++();
back_insert_iterator<Container> operator++(int);
Rückgabewert
Ein back_insert_iterator
, der den nächsten Speicherort adressiert, an dem ein Wert gespeichert werden kann
Hinweise
Sowohl der Prä- als auch der Postinkrement-Operator geben das gleichen Ergebnis zurück.
Beispiel
// 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=
Fügt einen Wert am Ende eines Containers ein, oder überträgt einen Wert dorthin.
back_insert_iterator<Container>& operator=(typename Container::const_reference val);
back_insert_iterator<Container>& operator=(typename Container::value_type&& val);
Parameter
val
Der Wert, der in den Container eingefügt werden soll.
Rückgabewert
Ein Verweis auf das letzte am Ende des Containers eingefügte Element.
Hinweise
Der erste Memberoperator wertet Container.push_back( val)
aus
danach gibt er *this
zurück. Der zweite Memberoperator wertet Folgendes aus:
container->push_back((typename Container::value_type&&)val)
,
danach gibt er *this
zurück.
Beispiel
// 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
Ein Typ, der einen Verweis für den back_insert_iterator
bereitstellt.
typedef typename Container::reference reference;
Hinweise
Ein Typ beschreibt den Verweis auf ein Element in der Sequenz, die durch den zugehörigen Container gesteuert wird.
Beispiel
// 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.
Siehe auch
<iterator>
Threadsicherheit in der C++-Standardbibliothek
C++-Standardbibliotheksreferenz