insert_iterator — Klasa
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. |
Odwołanie | 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.
_It
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++
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla