Bagikan melalui


iterator_traits Struct

Struktur pembantu templat yang digunakan untuk menentukan semua definisi jenis kritis yang harus dimiliki iterator.

Sintaks

struct iterator_traits {
   typedef typename Iterator::iterator_category iterator_category;
   typedef typename Iterator::value_type value_type;
   typedef typename Iterator::difference_type difference_type;
   typedef difference_type distance_type;
   typedef typename Iterator::pointer pointer;
   typedef typename Iterator::reference reference;
   };

Keterangan

Struktur templat menentukan jenis anggota

  • iterator_category: sinonim untuk Iterator::iterator_category.

  • value_type: sinonim untuk Iterator::value_type.

  • difference_type: sinonim untuk Iterator::difference_type.

  • distance_type: sinonim untuk Iterator::difference_type.

  • pointer: sinonim untuk Iterator::pointer.

  • reference: sinonim untuk Iterator::reference.

Spesialisasi parsial menentukan jenis kritis yang terkait dengan penunjuk objek jenis Jenis * atau tipe *const .

Dalam implementasi ini Anda juga dapat menggunakan beberapa fungsi templat yang tidak menggunakan spesialisasi parsial:

template <class Category, class Type, class Diff>
C _Iter_cat(const iterator<Category, Ty, Diff>&);

template <class Ty>
random_access_iterator_tag _Iter_cat(const Ty *);

template <class Category, class Ty, class Diff>
Ty *val_type(const iterator<Category, Ty, Diff>&);

template <class Ty>
Ty *val_type(const Ty *);

template <class Category, class Ty, class Diff>
Diff *_Dist_type(const iterator<Category, Ty, Diff>&);

template <class Ty>
ptrdiff_t *_Dist_type(const Ty *);

yang menentukan beberapa jenis yang sama secara lebih tidak langsung. Anda menggunakan fungsi ini sebagai argumen pada panggilan fungsi. Tujuan tunggal mereka adalah untuk menyediakan parameter templat kelas yang berguna ke fungsi yang disebut.

Contoh

// iterator_traits.cpp
// compile with: /EHsc
#include <iostream>
#include <iterator>
#include <vector>
#include <list>

using namespace std;

template< class it >
void
function( it i1, it i2 )
{
   iterator_traits<it>::iterator_category cat;
   cout << typeid( cat ).name( ) << endl;
   while ( i1 != i2 )
   {
      iterator_traits<it>::value_type x;
      x = *i1;
      cout << x << " ";
      i1++;
   };
   cout << endl;
};

int main( )
{
   vector<char> vc( 10,'a' );
   list<int> li( 10 );
   function( vc.begin( ), vc.end( ) );
   function( li.begin( ), li.end( ) );
}
/* Output:
struct std::random_access_iterator_tag
a a a a a a a a a a
struct std::bidirectional_iterator_tag
0 0 0 0 0 0 0 0 0 0
*/

Persyaratan

Header:<iterator>

Namespace: std

Lihat juga

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