Sdílet prostřednictvím


random_access_iterator_tag Struct

Třída, která poskytuje návratový typ pro iterator_category funkci, která představuje náhodný přístup iterace.

struct random_access_iterator_tag
   : public bidirectional_iterator_tag {};

Poznámky

Kategorie tříd značky se používají jako kompilace značky pro výběr algoritmu.Funkce šablony potřebuje vyhledat nejvíce specifické kategorie argumentu iterace může použít algoritmus nejúčinnější při kompilaci.Pro každý iterační typu Iterator, iterator_traits<Iterator>:: iterator_category musí být definován nejvíce specifické kategorie tag, který popisuje chování iteraci.

Typ je stejné jako iterační<Iter>:: iterator_category při Iter popisuje objekt, který může sloužit jako iterační náhodný přístup.

Příklad

// 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;
}

Vzorový výstup

Následující výstup je pro x 86.

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

Požadavky

Záhlaví: <iterator>

Obor názvů: std

Viz také

Referenční dokumentace

bidirectional_iterator_tag Struct

Bezpečnostní vlákno v Standardní knihovna C++

Standardní šablona knihovny