Sdílet prostřednictvím


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