如何编写一个返回向量元素总和的递归函数的驱动程序?

时间:2015-03-07 03:08:29

标签: c++

这是一个工作正常的递归函数。它总结了向量中的所有内容。驱动程序的规范是:创建一个驱动函数来调用递归函数; 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);
}

1 个答案:

答案 0 :(得分:1)

这是const - 正确性问题。

鉴于const vector<Object>& aa.begin()vector<Object>::const_iterator,而不是vector<Object>::iterator。您的sumVectorRecurse无法接受vector<Object>::const_iterator

我建议sumVectorRecurse使用vector<Object>::const_iterator,因为虽然您无法删除const,但您通常可以添加它!