在c+以下运行+;程序 我最近开始用C++编写代码,当我运行代码时,它运行得很好, class Solution { public: vector<int> twoSum(vector<int> &numbers, int target){ vector<int> result; for (int i = 0; i < numbers.size(); i++) { for (int j =i+1 ; j<numbers.size(); j++){ if (numbers[j] == target - numbers[i]){ result.push_back (i); result.push_back (j); } } } return result; } };

在c+以下运行+;程序 我最近开始用C++编写代码,当我运行代码时,它运行得很好, class Solution { public: vector<int> twoSum(vector<int> &numbers, int target){ vector<int> result; for (int i = 0; i < numbers.size(); i++) { for (int j =i+1 ; j<numbers.size(); j++){ if (numbers[j] == target - numbers[i]){ result.push_back (i); result.push_back (j); } } } return result; } };,c++,C++,我不知道为什么,因为两者都是一样的 class Solution { public: vector<int> twoSum(vector<int> &numbers, int target){ vector<int> result; for (int i = 0; i < numbers.size(); i++) { for (int j =i+1 ; j<numbers.si

我不知道为什么,因为两者都是一样的

class Solution {
public:
    vector<int> twoSum(vector<int> &numbers, int target){
        vector<int> result;
        for (int i = 0; i < numbers.size(); i++) {
            for (int j =i+1 ; j<numbers.size(); j++){
                if (numbers[j] == target - numbers[i]){
                    result.push_back (i);
                    result.push_back (j);
                    return result;
                }
            }
        }
    }
    
};
类解决方案{
公众:
向量twoSum(向量和数字,整数目标){
矢量结果;
对于(int i=0;i对于(int j=i+1;j两个代码不相同

在第一个代码中,
return
语句放在嵌套的for循环之后,以便在调用函数
twoSum()
时始终执行该语句

但是,在第二个代码示例中,
return
语句包含在
if
语句中,因此仅在
if
语句中的条件为statisfied时执行

因此,从编译器的角度来看,
if
语句中的表达式可能永远不会计算为
true
,因此
return
语句可能永远不会执行


您可以通过在函数末尾添加
return
语句来更正第二个代码,就像在第一段代码中一样。

对于第二个代码示例,错误是正确的。如果向量的大小为0,函数将返回什么?它们也可能会产生不同的结果。我的意思是,第二个函数在第一个o上退出函数if条件为true时发生。它们不相同,一个在函数末尾有一个
返回
,另一个只在if语句中返回,因为函数应该返回一个值,下面的代码仅在满足条件时返回。如果该条件从未通过,则函数如果第二个示例中的
If
从未计算为true,则函数不会返回值如果
If
语句一直失败,它将不返回任何值,但非void函数应返回一些值惯性导航与制导。