如何从迭代器获取迭代器底层类型?

时间:2013-08-13 21:03:14

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

这是关于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 变量(如果解除引用.begin一个空向量是合法的,除了丑陋的IDK :))?

1 个答案:

答案 0 :(得分:4)

您可能正在寻找(更加详细,请注意)std::iterator_traits

特别是,这解析为typename std::iterator_traits<BIt>::value_type

我不认为使用它有多大好处,它更加冗长,依赖于额外的包含<iterator>。如果你不想要temp变量,你可以使用decltype(*first)

相关问题