C++ return语句何时中断函数?
我用以下代码得到“控制到达非无效函数的末尾”:C++ return语句何时中断函数?,c++,C++,我用以下代码得到“控制到达非无效函数的末尾”: class Solution { public: vector<int> solutions; vector<int> twoSum(vector<int>& nums, int target) { for(int i = 0; i < nums.size(); i++) { for(int j = i+1; j &l
class Solution {
public:
vector<int> solutions;
vector<int> twoSum(vector<int>& nums, int target)
{
for(int i = 0; i < nums.size(); i++)
{
for(int j = i+1; j < nums.size(); i++)
{
if(nums[i] + nums[j] == target)
{
solutions.push_back(j);
solutions.push_back(i);
return solutions:
}
}
}
}
};
类解决方案{
公众:
向量解;
向量twoSum(向量和nums,整数目标)
{
对于(int i=0;i
我以为return语句应该在函数到达后立即中断它?感谢您的帮助。谢谢 由于函数的返回类型是向量,因此它必须始终返回向量。但您编写代码的方式可能并不总是返回向量。若您的
if
语句从未变为true,则函数根据定义返回void,它必须返回向量。这就是为什么编译器可能会生成警告。我想以下内容可以解决您的问题:
vector<int> twoSum(vector<int>& nums, int target)
{
for(int i = 0; i < nums.size(); i++)
{
for(int j = i+1; j < nums.size(); j++)
{
if(nums[i] + nums[j] == target)
{
solutions.push_back(j);
solutions.push_back(i);
return solutions;
}
}
}
return solutions;
}
vector twoSum(vector&nums,int目标)
{
对于(int i=0;i
由于函数的返回类型是向量,因此必须始终返回向量。但您编写代码的方式可能并不总是返回向量。若您的if
语句从未变为true,则函数根据定义返回void,它必须返回向量。这就是为什么编译器可能会生成警告。我想以下内容可以解决您的问题:
vector<int> twoSum(vector<int>& nums, int target)
{
for(int i = 0; i < nums.size(); i++)
{
for(int j = i+1; j < nums.size(); j++)
{
if(nums[i] + nums[j] == target)
{
solutions.push_back(j);
solutions.push_back(i);
return solutions;
}
}
}
return solutions;
}
vector twoSum(vector&nums,int目标)
{
对于(int i=0;i
当找不到解决方案时,它应该返回什么?返回已属于该类的向量的任何原因?如果您多次调用该函数会怎么样?@PaulRooney,将返回一个副本。在第二次for循环中,您可能希望j++
而不是i++
@chris sure,但第二次调用时,它可能包含4项。此外,他还可以通过使向量为本地并使用RVO来保存副本。当找不到解决方案时,它应该返回什么?返回已属于该类的向量的任何原因?如果您多次调用该函数会怎么样?@PaulRooney,将返回一个副本。在第二次for循环中,您可能希望j++
而不是i++
@chris sure,但第二次调用时,它可能包含4项。此外,他还可以通过将向量设置为本地并使用RVO来保存副本。这对于多个返回语句来说非常简单。@chris好的……我正在根据您的评论更新我的解决方案。@Asif有意义-谢谢!出于好奇,如果出于某种原因,我可以假设if语句总是正确的,那么代码会好吗?老实说,我会选择return{j,I}
和返回{}分别是code>,但在这一点上有点挑剔。如果你(和OP)不修复第二个for循环,就会面临糟糕的事情:i++
应该是j++
。这是一个多返回语句更清晰的简单例子。@chris好的……我正在根据你的评论更新我的解决方案。@Asif有意义-谢谢!出于好奇,如果出于某种原因,我可以假设if语句总是正确的,那么代码会好吗?老实说,我会选择return{j,I}
和返回{}如果你(和OP)不修复第二个for循环:i++
应该是j++
,那么你将面临糟糕的事情。