Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yineleyicinin sahip olması gereken tüm kritik tür tanımlarını belirtmek için kullanılan bir şablon yardımcı yapısı.
Sözdizimi
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;
};
Açıklamalar
Şablon yapısı üye türlerini tanımlar
iterator_category: içinIterator::iterator_categorybir eş anlamlıdır.value_type: içinIterator::value_typebir eş anlamlıdır.difference_type: içinIterator::difference_typebir eş anlamlıdır.distance_type: içinIterator::difference_typebir eş anlamlıdır.pointer: içinIterator::pointerbir eş anlamlıdır.reference: içinIterator::referencebir eş anlamlıdır.
Kısmi özelleştirmeler, Tür veya sabit * Tür * türünde bir nesne işaretçisiyle ilişkili kritik türleri belirler.
Bu uygulamada, kısmi özelleştirme kullanmayan çeşitli şablon işlevlerini de kullanabilirsiniz:
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 *);
aynı türlerden birkaçını daha dolaylı olarak belirler. Bu işlevleri bir işlev çağrısında bağımsız değişken olarak kullanırsınız. Tek amaçları, çağrılan işleve yararlı bir sınıf şablonu parametresi sağlamaktır.
Örnek
// 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
*/
Gereksinimler
Üst bilgi:<yineleyici>
Ad alanı: std
Ayrıca bkz.
<Yineleyici>
C++ Standart Kitaplığında İş Parçacığı Güvenliği
C++ Standart Kitaplığı Başvurusu