C++程序 寻找给定迭代器类型
给定一个使用迭代器的程序,任务是找到使用的迭代器类型。
例如:
输入: vector.begin()
输出: 随机访问迭代器
输入: list.begin()
输出: 双向迭代器
C++标准库中存在五种类型的迭代器,如下所述:
- C++中的正向迭代器
- C++中的双向迭代器
- C++中的输入迭代器
- C++中的输出迭代器
- C++中的随机访问迭代器
方法:
- 可以使用 typeid 检查迭代器类型。 typeid是C++语言运算符,它在运行时返回类型标识信息。它基本上返回一个type_info对象,它可以与其他type_info对象进行比较。
- 与此同时使用 迭代器traits 。 traits类定义迭代器的属性。标准算法通过使用相应iterator_traits实例的成员确定传递给它们和它们所代表的范围的某些迭代器的属性。
- 还传递了 迭代器类别 ,它定义了迭代器所属的迭代器类别。共有五种标记类型,即:输入迭代器标记、输出迭代器标记、前向迭代器标记、双向迭代器标记、随机访问迭代器标记。
- typename 与之配合使用,在实例化期间为迭代器提供类型。
- 现在,如果输入迭代器的迭代器类别与现有迭代器类别相匹配,则显示结果。
// C ++程序找到迭代器类型
#include <bits/stdc++.h>
using namespace std;
template <class T>
// 返回迭代器类型的函数
string get_iterator_type(T it)
{
// 如果(it)的迭代器类别匹配输入
if (typeid(typename iterator_traits<T>::iterator_category)
== typeid(input_iterator_tag))
return "输入";
// 如果(it)的迭代器类别匹配输出
else if (typeid(typename iterator_traits<T>::iterator_category)
== typeid(output_iterator_tag))
return "输出";
// 如果(it)的迭代器类别匹配前向
else if (typeid(typename iterator_traits<T>::iterator_category)
== typeid(forward_iterator_tag))
return "前向";
// 如果(it)的迭代器类别匹配双向
else if (typeid(typename iterator_traits<T>::iterator_category)
== typeid(bidirectional_iterator_tag))
return "双向";
// 如果(it)的迭代器类别匹配随机访问
else if (typeid(typename iterator_traits<T>::iterator_category)
== typeid(random_access_iterator_tag))
return "随机访问";
// 如果(it)的迭代器类别
// 不匹配以上任何一种
return "缺失的";
}
// 主函数
int main()
{
vector<int> v;
// 将要检查的迭代器
auto it = v.begin();
cout << get_iterator_type(it) << " 迭代器\n";
return 0;
}
随机访问迭代器
时间复杂度: 找到迭代器类型的时间复杂度为O(1)