📜  C++程序查找给定迭代器的类型

📅  最后修改于: 2021-05-30 13:13:24             🧑  作者: Mango

给定一个使用迭代器的程序,任务是查找所使用的迭代器的类型。

例子:

C++标准库中存在五种迭代器,分别在下面提到:

  1. C++中的正向迭代器
  2. C++中的Bidirectional_Iterators
  3. C++中的输入迭代器
  4. C++中的输出迭代器
  5. C++中的Random_access迭代器

方法:

  • 可以使用typeid来检查迭代器的类型。 typeid是一种C++语言运算符,可在运行时返回类型标识信息。它基本上返回一个type_info对象,该对象与其他type_info对象具有相等性。
  • 与之一起使用迭代器特征。特性类定义迭代器的属性。标准算法通过使用相应iterator_traits实例化的成员来确定传递给它们的迭代器的某些属性及其代表的范围。
  • 还传递了一个迭代器类别,该类别定义了该迭代器所属的迭代器类别。
    有五种类型的变量分别是:input_iterator_tag,output_iterator_tag,forward_iterator_tag,bidirectional_iterator_tag,random_access_iterator_tag。
  • typename与它一起使用,以在实例化期间为迭代器提供类型。
  • 现在,如果输入迭代器的迭代器类别与现有迭代器类别匹配,则显示结果。
// C++ program to find the type of iterator
#include 
using namespace std;
template 
  
// 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::iterator_category)
        == typeid(input_iterator_tag))
        return "Input";
  
    // if the iterator category of (it) matches output
    else if (typeid(typename iterator_traits::iterator_category)
             == typeid(output_iterator_tag))
        return "Output";
  
    // if the iterator category of (it) matches forward
    else if (typeid(typename iterator_traits::iterator_category)
             == typeid(forward_iterator_tag))
        return "Forward";
  
    // if the iterator category of (it) matches bidirectional
    else if (typeid(typename iterator_traits::iterator_category)
             == typeid(bidirectional_iterator_tag))
        return "Bidirectional";
  
    // if the iterator category of (it) matches random_access
    else if (typeid(typename iterator_traits::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 v;
  
    // iterator that will be checked
    auto it = v.begin();
  
    cout << get_iterator_type(it) << " Iterator\n";
  
    return 0;
}
输出:
Random_Access Iterator

时间复杂度: O(1)查找迭代器类型

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”