我在以下代码中遇到了一个奇怪的编译错误:
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()));
在我看来,如果我先构造 vector ,然后将其传递给函数,它就可以很好地工作。就像我在
if
下的 block 中所做的那样: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
首先接受迭代器范围。然后你可以运行你的整个算法,只看一个缓冲区,而不是制作成堆的部分拷贝。
- 毫米
关于c++ - 将 vector 作为参数传递时没有匹配的函数异常(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34146916/