如何从 C 中的迭代器中检索值类型?

新手上路,请多包涵

对于任何熟悉 C++ 语法的人来说,我的问题肯定是一个简单的问题。我正在学习 C++,这是 某种 家庭作业。

 template<typename Iter>
void quickSort(Iter begin, Iter end)
{
    //..
    auto pivot = * ( begin + (end - begin)/2 );
    //..
}

pivot 应该包含来自区间中心的值 [begin, end]

我在那里编写的代码有效,但 auto 是新 C++11 语言标准的关键字。老办法怎么办?我写什么而不是 auto

原文由 Ilya Smagin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 326
1 个回答

typename std::iterator_traits<Iter>::value_type

如果您的模板使用 Iter 作为指针类型实例化,这将起作用。

顺便说一句, typename 不是类型本身的一部分。它告诉编译器 value_type 确实是一种类型。如果它是函数或静态数据成员的名称,则会影响语法。编译器不一定知道它是什么,因为 iterator_traits for Iter 的特化在模板编译时可能不可见。

原文由 Steve Jessop 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题