对于任何熟悉 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 许可协议
typename std::iterator_traits<Iter>::value_type
如果您的模板使用
Iter
作为指针类型实例化,这将起作用。顺便说一句,
typename
不是类型本身的一部分。它告诉编译器value_type
确实是一种类型。如果它是函数或静态数据成员的名称,则会影响语法。编译器不一定知道它是什么,因为iterator_traits
forIter
的特化在模板编译时可能不可见。