3

请解释此函数如何返回两个值。它采用一个数组并从数组中返回两个数字,其总和等于目标总和。

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
    int a = 0;
    int b = 0;
    for (int i=0; i<nums.size()-1; i++)
    {
        for (int j=i+1; j<nums.size(); j++)
        {
            if (nums[i] + nums[j] == target)
            {
                a = i;
                b = j;
            }
        }
    }
    return {a, b};
    }
};
4

2 回答 2

7

该类std::vector有一个构造函数,它带有模板特化的第一个参数,std::initializer_list<T>并相应地接受一个初始化列表。

vector(initializer_list<T>, const Allocator& = Allocator());

这样的构造函数称为初始化列表构造函数

因此,当在 return 语句中使用相同类型的对象的花括号列表时,编译器会尝试将此花括号列表用作构造函数的参数,该构造函数接受初始化列表来构建指定返回类型的返回对象。

实际上,在引擎盖下使用了以下操作:

std::vector<int> temporary_object = { a, b };

所以函数只返回一个类型std::vector<int>(函数的返回类型)的对象(容器),其中包含两个类型的元素int

于 2021-02-08T11:36:31.083 回答
2

该函数返回一个向量 : vector<int> twoSum(...) { ... }。该行return {a, b};调用向量的构造函数,用两个值初始化。这相当于:

vector<int> myVector;
myVector.push_back(a);
myVector.push_back(b);
return myVector;

于 2021-02-08T11:37:26.773 回答