iterator_traits-Struktur
Eine Vorlagenhilfsstruktur wird verwendet, um alle wichtigen Typdefinitionen anzugeben, die ein Iterator haben sollte.
Syntax
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;
};
Hinweise
Die Vorlagenstruktur definiert die Membertypen.
iterator_category
: ein Synonym fürIterator::iterator_category
.value_type
: ein Synonym fürIterator::value_type
.difference_type
: ein Synonym fürIterator::difference_type
.distance_type
: ein Synonym fürIterator::difference_type
.pointer
: ein Synonym fürIterator::pointer
.reference
: ein Synonym fürIterator::reference
.
Die Teilspezialisierungen bestimmen die kritischen Typen mit einem Zeiger vom Typ Type * oder const Type *.
In dieser Implementierung können Sie auch mehrere Vorlagenfunktionen verwenden, die keine Teilspezialisierung benutzen:
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 *);
welche mehrere der gleichen Typen indirekter bestimmen. Sie verwenden diese Funktionen als Argumente in einem Funktionsaufruf. Der einzige Zweck besteht darin, einen nützlichen Klassenvorlagenparameter für die aufgerufene Funktion zu liefern.
Beispiel
// 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
*/
Anforderungen
Header:<iterator>
Namespace: std
Weitere Informationen
<iterator>
Threadsicherheit in der C++-Standardbibliothek
C++-Standardbibliotheksreferenz
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für