这是一个工作正常的递归函数。它总结了向量中的所有内容。驱动程序的规范是:创建一个驱动函数来调用递归函数; driver函数返回递归函数返回的值。 驱动程序函数接受一个vector类型的参数并返回一个Object。 DRIVER在其最后一行显示错误,上面写着“没有匹配函数来调用sumVectorRecurse”。任何想法如何解决这个问题或改进驱动程序本身?
//recursive function
template<class Object>
Object sumVectorRecurse(typename vector<Object>::iterator left, typename vector<Object>::iterator right)
{
if (left != right){
int midPosition = (right - left)/2;
typename vector<Object>::iterator mid = left + midPosition;
return (sumVectorRecurse<Object>(left, mid) + sumVectorRecurse<Object>(mid+1, right));
}
else return *left;
}
//driver routine
template<class Object>
Object sumVector(const vector<Object> & a){
if (a.size()==1){
return *(a.begin());
}
else
return sumVectorRecurse<Object>(a.begin(), a.end()-1);
}
int main(){
vector<int> v = {1,2,3,-4,5};
cout << endl << "THIS IS QUESTION 4:"<< endl;
sumVector(v);
}
答案 0 :(得分:1)
这是const
- 正确性问题。
鉴于const vector<Object>& a
,a.begin()
是vector<Object>::const_iterator
,而不是vector<Object>::iterator
。您的sumVectorRecurse
无法接受vector<Object>::const_iterator
。
我建议sumVectorRecurse
使用vector<Object>::const_iterator
,因为虽然您无法删除const
,但您通常可以添加它!