Bagikan melalui


random_access_iterator_tag Struct

Kelas yang menyediakan jenis pengembalian untuk iterator_category fungsi yang mewakili iterator akses acak.

Sintaks

struct random_access_iterator_tag    : public bidirectional_iterator_tag {};

Keterangan

Kelas tag kategori digunakan sebagai tag kompilasi untuk pemilihan algoritma. Fungsi templat perlu menemukan kategori paling spesifik dari argumen iteratornya sehingga dapat menggunakan algoritma yang paling efisien pada waktu kompilasi. Untuk setiap iterator jenis Iterator,Iterator<>iterator_traits ::iterator_category harus didefinisikan menjadi tag kategori paling spesifik yang menjelaskan perilaku iterator.

Jenisnya sama dengan iterator Iterator<>::iterator_category saat Iter menjelaskan objek yang dapat berfungsi sebagai iterator akses acak.

Contoh

// 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 sampel

Output berikut adalah untuk 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

Persyaratan

Header:<iterator>

Namespace: std

Lihat juga

bidirectional_iterator_tag Struct
Keamanan utas di Pustaka Standar C++
Referensi pustaka standar C++