C ++:如何从定义的容器对象中获取迭代器类型

时间:2016-11-11 01:47:34

标签: c++ templates iterator containers typedef

我有一个代码形式:

unordered_set<pair<int,int>,CustomHash> Edges;
typedef unordered_set<pair<int,int>,CustomHash>::iterator EdgesIt;
...
for(auto it=Edges.begin();it!=Edges.end();it++){
    list<EdgesIt> List;
}

等。如何避免定义要在List声明中使用的新类型EdgesIt并以更智能的方式获取它,例如:

list<Edges::iterator_type> List;

InteliSense仅建议Edges::iterator,其定义为typedef std::iterator pair<int,int> iterator。更多的说,它不起作用。我也尝试使用unordered_set::iterator,但它也没有用。

1 个答案:

答案 0 :(得分:7)

Edges是对象的名称,而不是类的名称(和名称空间等)。您无法直接从Edges::iterator获取嵌套的typedef。

您可以使用decltype(自C ++ 11开始)获取所需类型(即unordered_set<pair<int,int>,CustomHash>)。 e.g。

list<decltype(Edges)::iterator> List; // same as list<unordered_set<pair<int,int>,CustomHash>::iterator> List;