【问题标题】:C++: How to get iterator type from defined container objectC++:如何从定义的容器对象中获取迭代器类型
【发布时间】:2017-03-25 05:02:28
【问题描述】:

我有一个表单中的代码:

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&lt;int,int&gt; iterator。多说一句,行不通。我也尝试过使用unordered_set::iterator,但它也不起作用。

【问题讨论】:

  • “它不起作用”不是一个有用的问题描述。 typedef Edges::iterator EdgesIt; 是正确的。
  • @SamVarshavchik Edges 不是上述问题中类型的名称,所以typedef Edges::iterator EdgesIt; 不正确。它需要是typedef decltype(Edges)::iterator EdgesIt

标签: c++ templates iterator containers typedef


【解决方案1】:

Edges 是对象的名称,而不是类的名称。您不能像Edges::iterator 那样直接从中获取嵌套的typedef

您可以使用decltype(C++11 起)来获取您想要的类型(即unordered_set&lt;pair&lt;int,int&gt;,CustomHash&gt;)。

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

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2014-09-26
    • 2012-11-18
    相关资源
    最近更新 更多