Che*_*Cat 2 c++ containers templates iterator 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;
}
Run Code Online (Sandbox Code Playgroud)
我如何避免定义要在List声明中使用的新类型EdgesIt并以更智能的方式获取它,例如:
list<Edges::iterator_type> List;
Run Code Online (Sandbox Code Playgroud)
InteliSense仅建议将Edges::iterator其定义为typedef std::iterator pair<int,int> iterator.更多的说,它不起作用.我也试过用unordered_set::iterator,但它也行不通.
Edges是对象的名称,而不是类的名称(和名称空间等).您无法直接从中获取嵌套的typedef Edges::iterator.
你可以使用decltype(从C++ 11开始)来获得你想要的类型(即unordered_set<pair<int,int>,CustomHash>).例如
list<decltype(Edges)::iterator> List; // same as list<unordered_set<pair<int,int>,CustomHash>::iterator> List;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
809 次 |
| 最近记录: |