【问题标题】:How to get iterator underlying type from iterator? [closed]如何从迭代器获取迭代器底层类型? [关闭]
【发布时间】:2013-08-13 21:03:14
【问题描述】:

这是一个关于decltype的小问题... 我有这样的事情:

using namespace std;
template< typename BIt >
void dostuff(BIt first, BIt middle, BIt last)
{
    auto temp = *first;
    for_each(first, middle, [](decltype((temp)) el)
    {cout << el << " "; });
}

int main()
{
    std::vector<int> vi{11,22,33,44,1,2,3,4,5};
    dostuff(std::begin(vi), std::begin(vi) + 4, std::end(vi));
}

我如何避免使用 temp 变量(如果取消引用空向量的.beginan 是合法的,除了是丑陋的 IDK :))?

【问题讨论】:

  • decltype(*first) 有什么问题?
  • @KerrekSB 没什么...我需要睡觉了 :)
  • 顺便说一句,在堆栈跟踪我的思维过程之后......我想起了我想知道的......如果我可以从类型而不是实例中获取迭代器类型的底层类型......现在我明白了愚蠢,因为 decltype 对表达式起作用。 :)

标签: c++ c++11 templates iterator decltype


【解决方案1】:

您可能正在寻找(请注意,要详细得多)std::iterator_traits

特别是,这会解析为typename std::iterator_traits&lt;BIt&gt;::value_type

我不认为使用它有什么好处,它更冗长并且依赖于一个额外的包含,&lt;iterator&gt;。如果您不想要临时变量,您可以使用decltype(*first)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2020-01-15
    • 2014-09-26
    • 2014-03-21
    • 1970-01-01
    • 2019-04-21
    • 2012-11-20
    相关资源
    最近更新 更多