我试图写一个函数来递归地找到向量中的最大值。为此,我想在findMax函数中测试它是否可以返回列表右边的最后一个值。但是最后,当列表只有一个元素时,它返回给我变量的地址而不是值。为什么?
/// finding max value in a list recursively
template <typename T>
int findMax(std::vector<T> arrayVector)
{
if(arrayVector.size()==1)
{
return arrayVector[0];
}
int op1= arrayVector[0];
std::vector<T> newVector (arrayVector.cbegin() + 1, arrayVector.cend());
disPlay(newVector);
int op2= findMax(newVector);
}
/// print vector
template <typename T>
void disPlay(std::vector<T> vectorArray)
{
for (int i=0; i< vectorArray.size(); i++)
{
std::cout << vectorArray[i] << "\t";
}
std::cout << "\n";
}
main()
{
std::vector<int> arrayVector = {6, 8, 19, 20, 23, 41, 49, 53, 56};
std::cout << findMax(arrayVector) << endl;
return 0;
}
我运行了您的程序,它触发了几个警告,一个可能证明有害行为的理由是缺少返回值int findMax(std::vector<T> arrayVector)
。
template <typename T>
int findMax(std::vector<T> arrayVector)
{
if(arrayVector.size()==1)
{
return arrayVector[0];
}
int op1= arrayVector[0];
std::vector<T> newVector (arrayVector.cbegin() + 1, arrayVector.cend());
disPlay(newVector);
int op2= findMax(newVector);
return op2; //<-- added return
}
我更正了https://wandbox.org/permlink/Kts9qs7MooG4dEQL中的问题
现在看来还可以。
使用编译器警告,它可以节省您很多时间的麻烦。
现在,这解决了您的代码问题,但是我建议您使用std::max_element
C ++数据结构中的max值。
这是一个函数的测试样本,该函数可以在无序向量中递归地获取最大值,而每次迭代都会丢失最后一个元素:
template <typename T>
void findMax(std::vector<T>& arrayVector)
{
if(arrayVector.size() == 0) //stop condition
return;
int max = *std::max_element(arrayVector.begin(), arrayVector.end());
std::cout << "Max value: "<< max << std::endl;
arrayVector.erase(arrayVector.end() - 1); //last element being deleted in every recursion
findMax(arrayVector);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句