Struct random_access_iterator_tag
Classe che fornisce un tipo restituito per iterator_category
la funzione che rappresenta un iteratore ad accesso casuale.
Sintassi
struct random_access_iterator_tag : public bidirectional_iterator_tag {};
Osservazioni:
Le classi di tag di categoria vengono usate come tag di compilazione per la selezione dell'algoritmo. La funzione modello deve trovare la categoria più specifica dell'argomento iteratore in modo da usare l'algoritmo più efficiente in fase di compilazione. Per ogni iteratore di tipo Iterator
, è necessario definire iterator_traits
<Iterator
>::iterator_category come il tag di categoria più specifico che descrive il comportamento dell'iteratore.
Il tipo è uguale all'iteratore<Iter>::iterator_category quando Iter
descrive un oggetto che può fungere da iteratore ad accesso casuale.
Esempio
// iterator_rait.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
#include <list>
using namespace std;
int main( )
{
vector<int> vi;
vector<char> vc;
list<char> lc;
iterator_traits<vector<int>:: iterator>::iterator_category cati;
iterator_traits<vector<char>:: iterator>::iterator_category catc;
iterator_traits<list<char>:: iterator>::iterator_category catlc;
// These are both random-access iterators
cout << "The type of iterator for vector<int> is "
<< "identified by the tag:\n "
<< typeid ( cati ).name( ) << endl;
cout << "The type of iterator for vector<char> is "
<< "identified by the tag:\n "
<< typeid ( catc ).name( ) << endl;
if ( typeid ( cati ) == typeid( catc ) )
cout << "The iterators are the same." << endl << endl;
else
cout << "The iterators are not the same." << endl << endl;
// But the list iterator is bidirectinal, not random access
cout << "The type of iterator for list<char> is "
<< "identified by the tag:\n "
<< typeid (catlc).name( ) << endl;
// cout << ( typeid ( vi.begin( ) ) == typeid( vc.begin( ) ) ) << endl;
if ( typeid ( vi.begin( ) ) == typeid( vc.begin( ) ) )
cout << "The iterators are the same." << endl;
else
cout << "The iterators are not the same." << endl;
// A random-access iterator is a bidirectional iterator.
cout << ( void* ) dynamic_cast< iterator_traits<list<char>:: iterator>
::iterator_category* > ( &catc ) << endl;
}
Output di esempio
Il risultato seguente è per x86.
The type of iterator for vector<int> is identified by the tag:
struct std::random_access_iterator_tag
The type of iterator for vector<char> is identified by the tag:
struct std::random_access_iterator_tag
The iterators are the same.
The type of iterator for list<char> is identified by the tag:
struct std::bidirectional_iterator_tag
The iterators are not the same.
0012FF3B
Requisiti
Header:<iterator>
Spazio dei nomi: std
Vedi anche
Struct bidirectional_iterator_tag
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Informazioni di riferimento per la libreria standard C++