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