将向量作为参数(C++)传递时,没有匹配函数异常

No matching function exception when passing vector as a parameter (C++)

本文关键字:异常 函数 向量 参数 C++      更新时间:2023-10-16

我在以下代码中遇到了一个奇怪的编译错误:

class Solution {
public:
    int function(vector<int>& nums) {
        //Did something
        int len = nums.size();
        int mid = len / 2;
        if (nums[mid] < nums[0]) {
            vector<int> newVec(nums.begin(), nums.begin() + mid);
            return function(newVec);
        }
        else 
            return function(vector<int>(nums.begin() + mid + 1, nums.end()));
    }
};

错误发生在:return function(vector<int>(nums.begin() + mid + 1, nums.end()));

在我看来,如果我先构造向量,然后把它传递给函数,它就可以很好地工作。就像我在if:下的区块中所做的那样

vector<int> newVec(nums.begin(), nums.begin() + mid);
return function(newVec);

但如果我把这两个步骤结合起来,就会出现错误。有人能为我解释一下吗?非常感谢~

================================================

编辑:

编译错误为

no matching function for call to ‘Solution::function(std::vector<int>)’

vector<int>& nums左值引用。您必须传递一个左值。要允许这两种用途,请更改为vector<int> const &nums,无论如何都应该这样做
首先考虑重新设计function以接受迭代器范围。然后,您可以运行整个算法,只需查看单个缓冲区,而不是对其部分进行大量复制。
–nbsp;M.M