对于熟悉C++语法的人来说,我的问题肯定是一个简单的问题.我只是在学习c ++,这是一种功课.
template<typename Iter>
void quickSort(Iter begin, Iter end)
{
//..
auto pivot = * ( begin + (end - begin)/2 );
//..
}
Run Code Online (Sandbox Code Playgroud)
pivot应该包含来自[begin,end]间隔中心的值.Ite我写的代码有效,但它auto是一个新的语言标准的关键字.怎么做老路?写什么而不是auto?
Ste*_*sop 33
typename std::iterator_traits<Iter>::value_type
如果您的模板Iter使用指针类型进行实例化,这将起作用.
顺便说一句,typename不是类型本身的一部分.它告诉编译器value_type确实是一个类型.如果它是函数或静态数据成员的名称,则会影响语法.编译器不一定知道它是什么,因为在编译模板时,iterator_traitsfor的特化Iter可能不可见.
小智 6
从 c++ 11 开始这也可以工作:
typename Iter::value_type
Run Code Online (Sandbox Code Playgroud)
所以您不必输入整个std::iterator_traits内容。
| 归档时间: |
|
| 查看次数: |
10087 次 |
| 最近记录: |