back_insert_iterator – třída
Popisuje adaptér iterátoru, který splňuje požadavky výstupního iterátoru. Vloží, spíše než přepíše, prvky do zadní části sekvence a poskytne tak sémantiku, která se liší od sémantiky přepsání poskytnuté iterátory kontejnerů sekvence jazyka C++. Třída back_insert_iterator
je templatizována na typ kontejneru.
Syntaxe
template <class Container>
class back_insert_iterator;
Parametry
Kontejner
Typ kontejneru do zadní části, které prvky mají být vloženy back_insert_iterator
pomocí .
Poznámky
Kontejner musí splňovat požadavky pro sekvenci vložení do zadní části, je-li možné vložit prvky na konec sekvence v amortizovaném konstantním času. Kontejnery sekvence standardní knihovny C++ definované deque Class, list Class a vector Class poskytují potřebnou push_back
členská funkce a splňují tyto požadavky. Tyto tři kontejnery a řetězce mohou být upraveny tak, aby se používaly s back_insert_iterator
. Musí back_insert_iterator
být vždy inicializován pomocí svého kontejneru.
Konstruktory
Konstruktor | Popis |
---|---|
back_insert_iterator | Vytvoří elementy back_insert_iterator za poslední prvek v kontejneru. |
Typedefs
Název typu | Popis |
---|---|
container_type | Typ, který poskytuje kontejner pro .back_insert_iterator |
odkaz | Typ, který poskytuje odkaz na back_insert_iterator . |
Operátory
Operátor | Popis |
---|---|
operátor* | Operátor dereferencing použitý k implementaci výstupního výrazu iterátoru * i = x pro zpětné vložení. |
operator++ | Zvýší back_insert_iterator hodnotu na další místo, do kterého může být uložena hodnota. |
operator= | Operátor přiřazení použitý k implementaci výrazu iterátoru výstupu * i = x pro vložení zpět. |
Požadavky
Záhlaví: <iterátor>
Obor názvů: std
back_insert_iterator::back_insert_iterator
Vytvoří elementy back_insert_iterator
za poslední prvek v kontejneru.
explicit back_insert_iterator(Container& _Cont);
Parametry
_Pokrač
Kontejner, do kterého back_insert_iterator
se má vložit prvek.
Návratová hodnota
A back_insert_iterator
pro kontejner parametrů.
Příklad
// 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
Typ, který poskytuje kontejner pro .back_insert_iterator
typedef Container
container_type;
Poznámky
Typ je synonymem parametru šablony Container.
Příklad
// 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*
Operátor dereferencing použitý k implementaci výstupního výrazu iterátoru * i = x.
back_insert_iterator<Container>& operator*();
Návratová hodnota
Odkaz na prvek vložený do zadní části kontejneru.
Poznámky
Používá se k implementaci výstupního výrazu iterátoru *Hodnota Iteru = . Pokud je iterátor, který řeší prvek v sekvenci, *Iter = hodnota nahradí tento prvek hodnotou a nezmění celkový počet prvků v sekvenci.
Příklad
// 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++
Zvýší back_insert_iterator
hodnotu na další místo, do kterého může být uložena hodnota.
back_insert_iterator<Container>& operator++();
back_insert_iterator<Container> operator++(int);
Návratová hodnota
Adresování back_insert_iterator
dalšího umístění, do kterého může být uložena hodnota.
Poznámky
Operátory preinkrementace i postinkrementace vrátí stejný výsledek.
Příklad
// 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=
Připojí nebo vloží hodnotu do back-endu kontejneru.
back_insert_iterator<Container>& operator=(typename Container::const_reference val);
back_insert_iterator<Container>& operator=(typename Container::value_type&& val);
Parametry
Val
Hodnota, která se má vložit do kontejneru.
Návratová hodnota
Odkaz na poslední prvek vložený do zadní části kontejneru.
Poznámky
První člen operátor vyhodnotí Container.push_back( val)
,
poté vrátí hodnotu *this
. Druhý operátor členu vyhodnocuje.
container->push_back((typename Container::value_type&&)val)
,
poté vrátí hodnotu *this
.
Příklad
// 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
Typ, který poskytuje odkaz na back_insert_iterator
.
typedef typename Container::reference reference;
Poznámky
Typ popisuje odkaz na prvek sekvence řízené přidruženým kontejnerem.
Příklad
// 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.
Viz také
<iterátor>
Bezpečný přístup z více vláken ve standardní knihovně C++
Standardní knihovna C++ – referenční dokumentace