提问人:emirhan demir 提问时间:7/8/2022 最后编辑:JeJoemirhan demir 更新时间:7/9/2022 访问量:558
地图的迭代器类型是什么?
What is the type of map's iterator?
问:
我是C++的新手。我发现要查看变量的类型,我可以在库上使用。typeid().name()
std::typeinfo
但是当我在地图数据结构上实现这个函数时,我得到了这个输出
itr 的类型是 :
St17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE
这是什么意思?实际上,我想知道 itr 的类型是什么,它是代码部分中 map 的迭代器。
#include <iostream>
#include <string>
#include <iterator>
#include <map>
#include <typeinfo>
using namespace std;
int main()
{
map <string, int> map1;
map1.insert({"A",1});
auto itr = map1.begin(); // Iterator is created by auto
for (itr; itr != map1.end(); itr++)
{
cout<<itr->first<<" "<<itr->second<<"\n";
}
cout<<"Type of itr is : "<<typeid(itr).name();
return 0;
}
答:
3赞
JeJo
7/8/2022
#1
我想知道 itr 的类型是什么,它是代码部分中 map 的迭代器?
的类型是map1.begin()
std::map<std::string, int>::iterator
您可以通过以下方式进行测试
#include <type_traits> // std::is_same_v
static_assert(std::is_same_v<
decltype(map1.begin()), std::map<std::string, int>::iterator>
, "are not same");
即关键字和上述内容的替代品(即),您也可以使用。auto
std::map<std::string, int>::iterator
decltype(map1.begin())
St17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE
这是什么意思?
它是编译器实现中类型的名称。从 std::type_info::name
返回一个实现定义的以 null 结尾的字符串,该字符串包含类型的名称。不提供任何保证;特别是,对于多个类型,返回的字符串可以是相同的,并且在同一程序的调用之间可以更改。
因此,它可能会因编译器而异,并且不能说这看起来总是一样的。
例如,在此处查看不同编译器中的类型:https://gcc.godbolt.org/z/ProxxaxfWmap1.begin()
评论
pair<string, int>
pair<string, int> pr = *itr;
std::map<std::string, int>::iterator