问题描述
请解释这个函数如何返回两个值。它接受一个数组并从数组中返回总和等于目标总和的两个数字。
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};
}
};
解决方法
类 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
类型的元素。
该函数返回一个向量:vector<int> twoSum(...) { ... }
。
行 return {a,b};
调用向量的构造函数,用两个值初始化。
这相当于:
vector<int> myVector;
myVector.push_back(a);
myVector.push_back(b);
return myVector;