Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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++