Open In App

C++ program to find the type of the given iterator

Given a program that uses an iterator, the task is to find the type of iterator used.

Examples:

Input : vector.begin()
Output : Random_Access Iterator

Input : list.begin()
Output : Bidirectional Iterator

There are namely five types of iterators present in the C++ Standard Library which are mentioned below:

  1. Forward Iterator in C++
  2. Bidirectional_Iterators in C++
  3. Input iterators in C++
  4. Output iterator in C++
  5. Random_access iterators in C++

Approach:




// C++ program to find the type of iterator
#include <bits/stdc++.h>
using namespace std;
template <class T>
  
// function to return the iterator type
string get_iterator_type(T it)
{
    // if the iterator category of (it) matches input
    if (typeid(typename iterator_traits<T>::iterator_category)
        == typeid(input_iterator_tag))
        return "Input";
  
    // if the iterator category of (it) matches output
    else if (typeid(typename iterator_traits<T>::iterator_category)
             == typeid(output_iterator_tag))
        return "Output";
  
    // if the iterator category of (it) matches forward
    else if (typeid(typename iterator_traits<T>::iterator_category)
             == typeid(forward_iterator_tag))
        return "Forward";
  
    // if the iterator category of (it) matches bidirectional
    else if (typeid(typename iterator_traits<T>::iterator_category)
             == typeid(bidirectional_iterator_tag))
        return "Bidirectional";
  
    // if the iterator category of (it) matches random_access
    else if (typeid(typename iterator_traits<T>::iterator_category)
             == typeid(random_access_iterator_tag))
        return "Random_Access";
  
    // if the iterator category of (it)
    // does not match any of the above
    return "Missing";
}
  
// Driver code
int main()
{
    vector<int> v;
  
    // iterator that will be checked
    auto it = v.begin();
  
    cout << get_iterator_type(it) << " Iterator\n";
  
    return 0;
}

Output:
Random_Access Iterator

Time-Complexity: O(1) to find the iterator type


Article Tags :
C++