Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Opisuje adapter iteratora, który spełnia wymagania iteratora danych wyjściowych. Wstawia elementy zamiast zastępować w sekwencji. W ten sposób zapewnia semantykę, która różni się od semantyki zastępowania udostępnianych przez iteratory sekwencji języka C++ i kontenerów asocjacyjnych. Klasa insert_iterator
jest templatized na typ kontenera, który jest dostosowywany.
Składnia
template <class Container>
class insert_iterator;
Parametry
Kontener
Typ kontenera, do którego należy wstawić elementy za pomocą elementu insert_iterator
.
Uwagi
Kontener typu Container
musi spełniać wymagania dotyczące kontenera o zmiennym rozmiarze i mieć funkcję wstawiania dwóch argumentów, w której parametry są typu Container::iterator
i Container::value_type
które zwracają typ Container::iterator
. Sekwencja standardowej biblioteki języka C++ i posortowane kontenery asocjacyjne spełniają te wymagania i można je dostosować do użycia z insert_iterator
programem s. Dla kontenerów asocjacyjnych argument pozycji jest traktowany jako wskazówka, która ma potencjał, aby zwiększyć lub zmniejszyć wydajność w zależności od tego, jak dobra jest to wskazówka. Element insert_iterator
musi być zawsze inicjowany przy użyciu kontenera.
Konstruktory
Konstruktor | opis |
---|---|
insert_iterator | Tworzy element insert_iterator , który wstawia element do określonej pozycji w kontenerze. |
Typedefs
Nazwa typu | opis |
---|---|
container_type | Typ, który reprezentuje kontener, w którym ma być przeprowadzone ogólne wstawienie. |
odniesienie | Typ, który zawiera odwołanie do elementu w sekwencji kontrolowanej przez skojarzony kontener. |
Operatory
Operator | opis |
---|---|
operator* | Operator dereferencing używany do implementowania wyrażenia iteratora wyjściowego * i = x dla wstawiania ogólnego. |
operator++ | Zwiększa insert_iterator wartość do następnej lokalizacji, w której może być przechowywana wartość. |
operator = | Operator przypisania używany do implementowania wyrażenia iteratora wyjściowego * i = x dla wstawiania ogólnego. |
Wymagania
Nagłówek: <iterator>
Przestrzeń nazw: std
insert_iterator::container_type
Typ, który reprezentuje kontener, w którym ma być przeprowadzone ogólne wstawienie.
typedef Container container_type;
Uwagi
Typ jest synonimem parametru szablonu Container.
Przykład
// 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
Tworzy element insert_iterator
, który wstawia element do określonej pozycji w kontenerze.
insert_iterator(Container& _Cont, typename Container::iterator _It);
Parametry
_Cd
Kontener, do którego należy insert_iterator
wstawić elementy.
_Ono
Położenie wstawiania.
Uwagi
Wszystkie kontenery mają funkcję wstawiania składową wywoływaną przez element insert_iterator
. W przypadku kontenerów asocjacyjnych parametr position jest tylko sugestią. Funkcja wstawiania zapewnia wygodny sposób wstawiania wartości.
Przykład
// 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*
Wyłuszcza iterator wstawiania zwracający element to adresy.
insert_iterator<Container>& operator*();
Wartość zwracana
Funkcja składowa zwraca wartość zaadresowanego elementu.
Uwagi
Służy do implementowania wyrażenia iteratora wyjściowego *wartość iteratora = . Jeśli Iter
jest iteratorem, który adresuje element w sekwencji, wartość *Iter = zastępuje ten element wartością i nie zmienia całkowitej liczby elementów w sekwencji.
Przykład
// 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++
Zwiększa insert_iterator
wartość do następnej lokalizacji, w której może być przechowywana wartość.
insert_iterator<Container>& operator++();
insert_iterator<Container> operator++(int);
Parametry
Adresowanie insert_iterator
następnej lokalizacji, w której może być przechowywana wartość.
Uwagi
Oba operatory preinkrementacji i postincrementation zwracają ten sam wynik.
Przykład
// 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=
Wstawia wartość do kontenera i zwraca iterator zaktualizowany w celu wskazania nowego elementu.
insert_iterator<Container>& operator=(
typename Container::const_reference val);
insert_iterator<Container>& operator=(
typename Container::value_type&& val);
Parametry
Val
Wartość, która ma zostać przypisana do kontenera.
Wartość zwracana
Odwołanie do elementu wstawionego do kontenera.
Uwagi
Pierwszy operator elementu członkowskiego ocenia
Iter = container->insert(Iter, val)
;
++Iter;
następnie zwraca wartość *this
.
Drugi operator elementu członkowskiego ocenia
Iter = container->insert(Iter, std::move(val));
++Iter;
następnie zwraca wartość *this
.
Przykład
// 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, który zawiera odwołanie do elementu w sekwencji kontrolowanej przez skojarzony kontener.
typedef typename Container::reference reference;
Uwagi
Typ opisuje odwołanie do elementu sekwencji kontrolowanej przez skojarzony kontener.
Przykład
// 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.
*/
Zobacz też
<Sterująca>
Bezpieczeństwo wątku w standardowej bibliotece C++
Dokumentacja standardowej biblioteki C++