Condividi tramite


random_access_iterator_tag Struct

Classe che fornisce un tipo restituito dalla funzione iterator_category che rappresenta un iteratore di accesso casuale.

struct random_access_iterator_tag
   : public bidirectional_iterator_tag {};

Note

Le classi di tag della categoria vengono utilizzate come compilano tag per la selezione dell'algoritmo.La funzione di modello deve trovare la categoria più specifica dell'argomento di iteratore in modo da poter utilizzare l'algoritmo più efficiente in fase di compilazione.Per ogni iteratore di tipo Iterator, iterator_traits<Iterator>::iterator_category deve essere definito come il tag di categoria più specifico che descrive il comportamento dell'iteratore.

Il tipo è lo stesso iterator<Iter>::iterator_category quando Iter descrive un oggetto che può fungere dagli iteratori di 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;
}

Esempio di output

L'output seguente viene 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

intestazione: <iterator>

Spazio dei nomi: deviazione standard

Vedere anche

Riferimenti

bidirectional_iterator_tag Struct

Thread safety della libreria C++ standard

Libreria di modelli standard