C++ 函数中的向量返回意外结果,循环

C++ 函数中的向量返回意外结果,循环,c++,vector,C++,Vector,下面将返回两个整数的匹配结果。我不明白为什么它会打印一些垃圾编号,而且它仍然处于循环中 #include <vector> #include <unordered_set> #include <iostream> //given array with integers {1,3,5,5,3,3} find a pair of numbers that will equal to targetSum //target Sum=10 for example u

下面将返回两个整数的匹配结果。我不明白为什么它会打印一些垃圾编号,而且它仍然处于循环中

#include <vector>
#include <unordered_set>
#include <iostream>

//given array with integers {1,3,5,5,3,3} find a pair of numbers that will equal to targetSum
//target Sum=10 for example

using namespace std;
vector<int> twoNumberSum(vector<int> array, int targetSum)
{
    unordered_set<int> nums;
    for (int num: array) {
        int potentialMatch = targetSum - num;
        if (nums.find(potentialMatch) != nums.end()) {
            vector<int> a = vector<int> {num,potentialMatch};
            vector<int> b = vector<int> {potentialMatch, num};

            return potentialMatch > num ? a : b;
        } else {
            nums.insert(num);
        }
    }

}

int main() {
    vector<int> array;
    array.push_back(1);
    array.push_back(3);
    array.push_back(5);
    array.push_back(7);
    int i;
    i = 10;
    auto res = twoNumberSum(array, i);
    for (auto item : res) 
        cout << item << endl;
}
#包括
#包括
#包括
//给定整数为{1,3,5,5,3,3}的数组,找到一对等于targetSum的数
//例如,目标总和=10
使用名称空间std;
向量twoNumberSum(向量数组,int targetSum)
{
无序的集合nums;
for(int num:array){
int-potentialMatch=targetSum-num;
if(nums.find(potentialMatch)!=nums.end(){
向量a=向量{num,potentialMatch};
向量b=向量{potentialMatch,num};
返回potentialMatch>num?a:b;
}否则{
nums.插入(num);
}
}
}
int main(){
矢量阵列;
数组。推回(1);
阵列。推回(3);
阵列。推回(5);
阵列。推回(7);
int i;
i=10;
auto res=两个numbersum(数组,i);
用于(自动项目:res)

cout函数结束前缺少
return
语句。如果不匹配,则需要返回空向量

vector<int> twoNumberSum(vector<int> array, int targetSum)
{
   unordered_set<int> nums;
   for (int num: array) {
      int potentialMatch = targetSum - num;
      if (nums.find(potentialMatch) != nums.end()) {
         vector<int> a = vector<int> {num,potentialMatch};
         vector<int> b = vector<int> {potentialMatch, num};

         return potentialMatch > num ? a : b;
      } else {
         nums.insert(num);
      }
   }

   // Missing from your code.
   return {};
}
向量twoNumberSum(向量数组,int targetSum) { 无序的集合nums; for(int num:array){ int-potentialMatch=targetSum-num; if(nums.find(potentialMatch)!=nums.end(){ 向量a=向量{num,potentialMatch}; 向量b=向量{potentialMatch,num}; 返回potentialMatch>num?a:b; }否则{ nums.插入(num); } } //代码中缺少。 返回{}; }

如果没有最后的
return
语句,您的代码将具有未定义的行为。

不确定是否发生了这种情况,在您的情况下(使用调试器逐步检查代码,应该会发现这一点),但是:如果
nums.find(potentialMatch)!=nums.end()
从来都不是真的吗?这是一个教训。我试图分配一个“return;”,但由于它在return语句中需要一个值,所以不被接受。谢谢!