Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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