我在以下代码中遇到了一个奇怪的编译错误:
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>)’
答案 0 :(得分:0)
vector<int>& nums
是左值参考。你必须传递一个左值。要允许这两种用途,请更改为vector<int> const &nums
,无论如何都应该这样做
考虑重新设计function
以首先接受迭代器范围。然后你可以运行你的整个算法只看一个缓冲区,而不是制作大量的部分副本
- M.M