这个c++函数是如何返回两个值的?



请解释这个函数如何返回两个值。它接受一个数组,并从数组中返回两个和等于目标和的数字。

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的构造函数。这相当于:

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

最新更新