insert_iterator – třída
Popisuje adaptér iterátoru, který splňuje požadavky výstupního iterátoru. Vloží prvky místo přepsání do sekvence. Poskytuje tedy sémantiku, která se liší od sémantiky přepsání poskytované iterátory sekvence C++ a asociativními kontejnery. Třída insert_iterator
je šablonována na typ kontejneru, který se upravuje.
Syntaxe
template <class Container>
class insert_iterator;
Parametry
Kontejner
Typ kontejneru, do kterého mají být prvky vloženy pomocí insert_iterator
.
Poznámky
Kontejner typu Container
musí splňovat požadavky pro kontejner s proměnlivou velikostí a má dvou argumentů vložit členovou funkci, kde jsou parametry typu Container::iterator
a Container::value_type
které vrací typ Container::iterator
. Sekvence standardní knihovny C++ a seřazené asociativní kontejnery splňují tyto požadavky a lze je přizpůsobit pro použití s insert_iterator
. Pro asociativní kontejnery je argument pozice považován za pokyn, který má potenciál zlepšit nebo snížit výkon v závislosti na tom, jak kvalitní nápověda je. Musí insert_iterator
být vždy inicializován pomocí svého kontejneru.
Konstruktory
Konstruktor | Popis |
---|---|
insert_iterator | Vytvoří prvek insert_iterator , který vloží prvek do zadané pozice v kontejneru. |
Typedefs
Název typu | Popis |
---|---|
container_type | Typ, který představuje kontejner, do kterého má být provedeno obecné vložení. |
odkaz | Typ, který poskytuje odkaz na prvek v sekvenci řízené přiřazeným kontejnerem. |
Operátory
Operátor | Popis |
---|---|
operátor* | Operátor dereferencing použitý k implementaci výstupního výrazu iterátoru * i = x pro obecné vložení. |
operator++ | Zvýší 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 výstupního iterátoru * i = x pro obecné vložení. |
Požadavky
Záhlaví: <iterátor>
Obor názvů: std
insert_iterator::container_type
Typ, který představuje kontejner, do kterého má být provedeno obecné vložení.
typedef Container container_type;
Poznámky
Typ je synonymem parametru šablony Container.
Příklad
// insert_iterator_container_type.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L1;
insert_iterator<list<int> >::container_type L2 = L1;
inserter ( L2, L2.end ( ) ) = 20;
inserter ( L2, L2.end ( ) ) = 10;
inserter ( L2, L2.begin ( ) ) = 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 20 10 ).
*/
insert_iterator::insert_iterator
Vytvoří prvek insert_iterator
, který vloží prvek do zadané pozice v kontejneru.
insert_iterator(Container& _Cont, typename Container::iterator _It);
Parametry
_Pokrač
Kontejner, do kterého insert_iterator
se mají vložit prvky.
_Ono
Pozice pro vložení.
Poznámky
Všechny kontejnery mají členovou funkci vložení volanou funkcí insert_iterator
. Pro asociativní kontejnery představuje parametr position pouze návrh. Funkce inserter poskytuje pohodlný způsob vložení k hodnotám.
Příklad
// insert_iterator_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 < 4 ; ++i )
{
L.push_back ( 10 * 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
inserter ( L, L.begin ( ) ) = 2;
// Alternatively, you may use the template version
insert_iterator< list < int> > Iter(L, L.end ( ) );
*Iter = 300;
cout << "After the 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:
( 10 20 30 ).
After the insertions, the list L is:
( 2 10 20 30 300 ).
*/
insert_iterator::operator*
Dereferences insert iterator returning the element is addresses.
insert_iterator<Container>& operator*();
Návratová hodnota
Členová funkce vrátí hodnotu prvku adresovaného.
Poznámky
Používá se k implementaci výstupního výrazu iterátoru *Hodnota Iteru = . Pokud Iter
je iterátor, který řeší prvek v posloupnosti, *Iter = hodnota nahradí tento prvek hodnotou a nezmění celkový počet prvků v sekvenci.
Příklad
// insert_iterator_op_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 = 0 ; i < 4 ; ++i )
{
L.push_back ( 2 * i );
}
cout << "The original list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
insert_iterator< list < int> > Iter(L, L.begin ( ) );
*Iter = 10;
*Iter = 20;
*Iter = 30;
cout << "After the insertions, the list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
}
/* Output:
The original list L is:
( 0 2 4 6 ).
After the insertions, the list L is:
( 10 20 30 0 2 4 6 ).
*/
insert_iterator::operator++
Zvýší insert_iterator
hodnotu na další místo, do kterého může být uložena hodnota.
insert_iterator<Container>& operator++();
insert_iterator<Container> operator++(int);
Parametry
Adresování 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
// insert_iterator_op_incr.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 5 ; ++i )
{
vec.push_back ( i );
}
vector <int>::iterator vIter;
cout << "The vector vec is:\n ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
insert_iterator<vector<int> > ii ( vec, vec.begin ( ) );
*ii = 30;
ii++;
*ii = 40;
ii++;
*ii = 50;
cout << "After the insertions, the vector vec becomes:\n ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
}
/* Output:
The vector vec is:
( 1 2 3 4 ).
After the insertions, the vector vec becomes:
( 30 40 50 1 2 3 4 ).
*/
insert_iterator::operator=
Vloží hodnotu do kontejneru a vrátí iterátor aktualizovaný tak, aby odkazovat na nový prvek.
insert_iterator<Container>& operator=(
typename Container::const_reference val,);
insert_iterator<Container>& operator=(
typename Container::value_type&& val);
Parametry
Val
Hodnota, která se má přiřadit ke kontejneru.
Návratová hodnota
Odkaz na prvek vložený do kontejneru.
Poznámky
První operátor člena vyhodnocuje.
Iter = container->insert(Iter, val)
;
++Iter;
poté vrátí hodnotu *this
.
Druhý operátor členu vyhodnocuje.
Iter = container->insert(Iter, std::move(val));
++Iter;
poté vrátí hodnotu *this
.
Příklad
// insert_iterator_op_assign.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 = 0 ; i < 4 ; ++i )
{
L.push_back ( 2 * i );
}
cout << "The original list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
insert_iterator< list < int> > Iter(L, L.begin ( ) );
*Iter = 10;
*Iter = 20;
*Iter = 30;
cout << "After the insertions, the list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
}
/* Output:
The original list L is:
( 0 2 4 6 ).
After the insertions, the list L is:
( 10 20 30 0 2 4 6 ).
*/
insert_iterator::reference
Typ, který poskytuje odkaz na prvek v sekvenci řízené přiřazeným kontejnerem.
typedef typename Container::reference reference;
Poznámky
Typ popisuje odkaz na prvek sekvence řízené přidruženým kontejnerem.
Příklad
// insert_iterator_container_reference.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L;
insert_iterator<list<int> > iivIter( L , L.begin ( ) );
*iivIter = 10;
*iivIter = 20;
*iivIter = 30;
list<int>::iterator LIter;
cout << "The list L is: ( ";
for ( LIter = L.begin ( ) ; LIter != L.end ( ); LIter++ )
cout << *LIter << " ";
cout << ")." << endl;
insert_iterator<list<int> >::reference
RefFirst = *(L.begin ( ));
cout << "The first element in the list L is: "
<< RefFirst << "." << endl;
}
/* Output:
The list L is: ( 10 20 30 ).
The first element in the list L is: 10.
*/
Viz také
<iterátor>
Bezpečný přístup z více vláken ve standardní knihovně C++
Standardní knihovna C++ – referenční dokumentace