Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ xác định kiểu của iterator cho trước


Iterator (bộ lặp) là một đối tượng giống như con trỏ, dùng để duyệt qua các phần tử của container (bộ chứa). Ưu điểm chính của iterator là tạo giao diện chung, khiến thuật toán không phụ thuộc vào kiểu container dùng để triển khai.

Trong thư viện chuẩn C++ có các kiểu iterator:

  • Forward iterator (tiến)
  • Bidirectional iterator (hai chiều)
  • Input iterator (nhập)
  • Output iterator (xuất)
  • Random Access iterator (truy cập ngẫu nhiên)

Chương trình kiểm tra cấu trúc dữ liệu dùng kiểu iterator nào trong các loại trên.

Có một số yếu tố hữu ích để xác định kiểu iterator:

  • typeid, trả về thông tin nhận diện kiểu tại runtime.

  • iterator traits, định nghĩa các thuộc tính mà iterator sở hữu.

  • Iterator category dùng để định nghĩa phân loại mà iterator thuộc về.

Ví dụ mã C++

#include <bits/stdc++.h> 
using namespace std; 

template <class T> 
string iteratortype(T iterator) { 
    if (typeid(typename iterator_traits<T>::iterator_category) 
        == typeid(input_iterator_tag)) 
        return "Input"; 
    else if (typeid(typename iterator_traits<T>::iterator_category) 
        == typeid(output_iterator_tag)) 
        return "Output"; 
    else if (typeid(typename iterator_traits<T>::iterator_category) 
        == typeid(forward_iterator_tag)) 
        return "Forward"; 
    else if (typeid(typename iterator_traits<T>::iterator_category) 
        == typeid(bidirectional_iterator_tag)) 
        return "Bidirectional"; 
    else if (typeid(typename iterator_traits<T>::iterator_category) 
        == typeid(random_access_iterator_tag)) 
        return "Random_Access"; 
    return "Missing"; 
} 

int main() { 
    vector<int> vec; 
    auto iter = vec.begin(); 
    cout << iteratortype(iter) << " Iterator\n"; 
    return 0; 
}

Kết quả

Random_Access Iterator