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 untukIterator::iterator_category
.value_type
: sinonim untukIterator::value_type
.difference_type
: sinonim untukIterator::difference_type
.distance_type
: sinonim untukIterator::difference_type
.pointer
: sinonim untukIterator::pointer
.reference
: sinonim untukIterator::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++