Bagikan melalui


Kelas insert_iterator

Menjelaskan adaptor iterator yang memenuhi persyaratan iterator output. Ini menyisipkan, bukan menimpa, elemen ke dalam urutan. Dengan demikian memberikan semantik yang berbeda dari semantik timpa yang disediakan oleh iterator dari urutan C++ dan kontainer asosiatif. Kelas insert_iterator di-templat pada jenis kontainer yang sedang diadaptasi.

Sintaks

template <class Container>
class insert_iterator;

Parameter

Kontainer
Jenis kontainer tempat elemen akan disisipkan oleh insert_iterator.

Keterangan

Kontainer jenis Container harus memenuhi persyaratan untuk kontainer berukuran variabel dan memiliki fungsi anggota sisipan dua argumen di mana parameter berjenis Container::iterator dan Container::value_type yang mengembalikan jenis Container::iterator. Urutan Pustaka Standar C++ dan kontainer asosiatif yang diurutkan memenuhi persyaratan ini dan dapat disesuaikan untuk digunakan dengan insert_iterators. Untuk kontainer asosiatif, argumen posisi diperlakukan sebagai petunjuk, yang berpotensi meningkatkan atau menurunkan performa tergantung pada seberapa baik petunjuknya. Harus insert_iterator selalu diinisialisasi dengan kontainernya.

Konstruktor

Konstruktor Deskripsi
insert_iterator Membuat yang insert_iterator menyisipkan elemen ke dalam posisi tertentu dalam kontainer.

Typedefs

Nama jenis Deskripsi
container_type Jenis yang mewakili kontainer tempat penyisipan umum akan dibuat.
referensi Jenis yang menyediakan referensi ke elemen dalam urutan yang dikontrol oleh kontainer terkait.

Operator

Operator Deskripsi
Operator* Operator dereferensi yang digunakan untuk mengimplementasikan ekspresi iterator output * i = x untuk penyisipan umum.
operator++ Menaikkan insert_iterator ke lokasi berikutnya tempat nilai dapat disimpan.
operator= Operator penugasan yang digunakan untuk mengimplementasikan ekspresi iterator output * i = x untuk penyisipan umum.

Persyaratan

Header: <iterator>

Namespace: std

insert_iterator::container_type

Jenis yang mewakili kontainer tempat penyisipan umum akan dibuat.

typedef Container container_type;

Keterangan

Jenisnya adalah sinonim untuk kontainer parameter templat.

Contoh

// 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

Membuat yang insert_iterator menyisipkan elemen ke dalam posisi tertentu dalam kontainer.

insert_iterator(Container& _Cont, typename Container::iterator _It);

Parameter

_Lanjut
Kontainer tempat insert_iterator memasukkan elemen.

_Dia
Posisi untuk penyisipan.

Keterangan

Semua kontainer memiliki fungsi sisipkan anggota yang dipanggil insert_iteratoroleh . Untuk kontainer asosiatif, parameter posisi hanyalah saran. Fungsi penyisip menyediakan cara mudah untuk menyisipkan ke nilai.

Contoh

// 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*

Dereferensi sisipan iterator yang mengembalikan elemen adalah alamat.

insert_iterator<Container>& operator*();

Tampilkan Nilai

Fungsi anggota mengembalikan nilai elemen yang ditangani.

Keterangan

Digunakan untuk mengimplementasikan ekspresi iterator output *Nilai iter = . Jika Iter adalah iterator yang membahas elemen secara berurutan, maka nilai *Iter = mengganti elemen tersebut dengan nilai dan tidak mengubah jumlah total elemen dalam urutan.

Contoh

// 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++

Menaikkan insert_iterator ke lokasi berikutnya tempat nilai dapat disimpan.

insert_iterator<Container>& operator++();

insert_iterator<Container> operator++(int);

Parameter

Alamat insert_iterator lokasi berikutnya tempat nilai dapat disimpan.

Keterangan

Operator preincrementation dan postincrementation mengembalikan hasil yang sama.

Contoh

// 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=

Menyisipkan nilai ke dalam kontainer dan mengembalikan iterator yang diperbarui untuk menunjuk ke elemen baru.

insert_iterator<Container>& operator=(
    typename Container::const_reference val);

insert_iterator<Container>& operator=(
    typename Container::value_type&& val);

Parameter

Val
Nilai yang akan ditetapkan ke kontainer.

Tampilkan Nilai

Referensi ke elemen yang disisipkan ke dalam kontainer.

Keterangan

Operator anggota pertama mengevaluasi

Iter = container->insert(Iter, val);

++Iter;

kemudian mengembalikan *this.

Operator anggota kedua mengevaluasi

Iter = container->insert(Iter, std::move(val));

++Iter;

kemudian mengembalikan *this.

Contoh

// 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::referensi

Jenis yang menyediakan referensi ke elemen dalam urutan yang dikontrol oleh kontainer terkait.

typedef typename Container::reference reference;

Keterangan

Jenis ini menjelaskan referensi ke elemen urutan yang dikontrol oleh kontainer terkait.

Contoh

// 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.
*/

Lihat juga

<iterator>
Keamanan utas di Pustaka Standar C++
Referensi pustaka standar C++