Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ return语句何时中断函数?_C++ - Fatal编程技术网

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}
返回{},但在这一点上有点挑剔。如果你(和OP)不修复第二个for循环,就会面临糟糕的事情:
i++
应该是
j++
。这是一个多返回语句更清晰的简单例子。@chris好的……我正在根据你的评论更新我的解决方案。@Asif有意义-谢谢!出于好奇,如果出于某种原因,我可以假设if语句总是正确的,那么代码会好吗?老实说,我会选择
return{j,I}
返回{}i++
应该是
j++
,那么你将面临糟糕的事情。